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

How to access static properties of an object that is itself a property of another object?

在 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.

使用 Late Static Binding 而不是继承 属性 可能会有更好的运气。所以它会是这样的(从上面的 PHP 手册页更改为示例):

<?php
class A
{
  public static function who() 
  {
    echo __CLASS__;
  }
  public static function test() 
  {
    static ::who();
     // Here comes Late Static Bindings

  }
}

class B extends A
{
  public static function who() 
  {
    echo __CLASS__;
  }
}

B::test();
?>

这是另一个可能相关或有帮助的话题:PHP Inheritance and Static Methods and Properties

更棘手,但你可以使用 ReflectionClass

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