2017-05-25 3 views
2
class A{ 
    const MY_CONSTANT = 'my constant'; 
} 

class B{ 
    protected $a; 

    public function __construct(A $a) 
    { 
     $this->a = $a; 
    } 

    public function someFunction() 
    { 
     return $this->a::MY_CONSTANT; 
    } 

} 

なぜこのように定数にアクセスできないのですか? - $ this-> a :: MY_CONSTANT?誰も他の方法を知っていますか?PHPで注入されたクラスの定数へのアクセス

+0

どのようにBを使用していますか? – inarilo

答えて

2

このようにして上記を達成することができます。ここでは、クラス名を文字列として取得する関数get_classを使用しています。これを変数に格納し、その変数を使用してconstantの値を取得します。

Try this code snippet here

<?php 
ini_set('display_errors', 1); 
class A{ 
    const MY_CONSTANT = 'my constant'; 
} 

class B{ 
    protected $a; 

    public function __construct(A $a) 
    { 

     $this->a = $a; 
    } 

    public function someFunction() 
    { 
     $class=get_class($this->a); 
     echo $class::MY_CONSTANT; 
    } 

} 
$object=new B(new A()); 
$object->someFunction(); 
+0

@SelimMahmudこれはあなたが探しているものだと思っています.... –

+0

それは動作します。ありがとう@Sahil Gulati。しかし、なぜPHPが$ this-> a :: MY_CONSTANTをサポートしないのだろうと思っていました。 PHPは吸う!!!!! –

+0

@SelimMahmud _PHP doesnot support_ PHPでは、 'classname :: constant_name'で定数にアクセスすることができます。ここではclassnameをstringとして取得し、定数にアクセスしています –

0

また、このアプローチによって、同じことを行うことができます。

class A{ 
    const MY_CONSTANT = 'my constant'; 
    public function __get($key){ 
     $r = new ReflectionObject($this); 
     if($r->hasConstant($key)){ return $r->getConstant($key); } 
    } 
} 

class B{  
    public function someFunction() 
    { 
     return new A(); 
    }  
} 

$b = new B(); 
var_dump($b->someFunction()->MY_CONSTANT); 

Original Answer Link

関連する問題