Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.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_Object_Static Members - Fatal编程技术网

Php 如何访问本身是另一个对象属性的对象的静态属性?

Php 如何访问本身是另一个对象属性的对象的静态属性?,php,object,static-members,Php,Object,Static Members,在PHP中,是否可以使用下面类似的语法访问本身是另一个对象属性的对象的静态属性: <?php class Foo { public $bar; function __construct() { $this->bar = new Bar(); } } class Bar { const TEST = 123; function __construct() {} } $bar = new Bar(); $foo = ne

在PHP中,是否可以使用下面类似的语法访问本身是另一个对象属性的对象的静态属性:

<?php
class Foo
{
    public $bar;
    function __construct()
    {
        $this->bar = new Bar();
    }
}

class Bar
{
    const TEST = 123;
    function __construct() {}
}

$bar = new Bar();
$foo = new Foo();

echo Bar::TEST; // ok
echo $bar::TEST; // ok
echo $foo->bar::TEST; // error
?>

将属性分配给变量

$foo = new Foo();
$bar = $foo->bar;
echo $bar::TEST; // that's good.

您可能会更幸运地在该属性上使用而不是继承。所以它是这样的(更改为上面PHP手册页面中的一个示例):



下面是另一个可能相关或有用的线索:

更棘手,但您可以使用ReflectionClass

echo (new ReflectionClass(get_class($foo->bar)))->getconstant("TEST");

太棒了,费德里科。“我将调试我的代码,因为它坏了。”@JakeB。复制并粘贴的代码会产生错误:
致命错误:未定义的类常量“TEST”
@更改了我的示例。显示我发布未经测试的代码。不用担心,谢谢你的努力。这个解决方案似乎引入了额外的、不必要的逻辑@Federico的回答显示了如何非常简单地完成静态引用。是的,从长远来看,将类实例分配给变量几乎总是更容易管理的。祝你好运。
echo (new ReflectionClass(get_class($foo->bar)))->getconstant("TEST");