Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中访问注入类的常量_Php_Class - Fatal编程技术网

在PHP中访问注入类的常量

在PHP中访问注入类的常量,php,class,Php,Class,为什么常量不能这样访问-$this->a::MY_常量?有人知道其他方法吗?上述方法可以通过这种方式实现。这里我们使用函数将类名作为字符串获取。我们将其存储在变量中,然后使用该变量检索常量的值 您也可以通过此方法执行相同的操作 <?php ini_set('display_errors', 1); class A{ const MY_CONSTANT = 'my constant'; } class B{ protected $a; public functi

为什么常量不能这样访问-$this->a::MY_常量?有人知道其他方法吗?

上述方法可以通过这种方式实现。这里我们使用函数将类名作为字符串获取。我们将其存储在变量中,然后使用该变量检索常量的值


您也可以通过此方法执行相同的操作

<?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();

你是如何使用B的?这很有效。谢谢@Sahil Gulati。但是我想知道为什么PHP不支持$this->a::MY_常量。PHP糟透了@selimahmud PHP在PHP中不支持我们可以使用
classname::constant\u name
访问常量,所以这里我们将classname作为字符串并访问常量
<?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();
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);