Как получить доступ к статическим свойствам объекта, который сам является свойством другого объекта?

В 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
?>

2

Решение

Присвойте свойство переменной.

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

Другие решения

более сложно, но вы можете использовать ReflectionClass

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

Возможно, вам повезет больше, используя Позднее статическое связывание вместо наследования на это имущество. Так что это будет что-то вроде этого (см. Пример со страницы руководства 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 и статические методы и свойства

1
По вопросам рекламы [email protected]