我正在尝试以下各种变体来引用静态属性:
get_called_class()::$$prop
我试过这个:
${get_called_class()}::$$prop
我尝试了很多东西,但似乎无法得到它。
我知道我可以这样做:
$className = get_called_class();
$className::$$prop
但是,这意味着额外的一行代码。当然,语言必须有一种方法可以使这项工作在同一条线上。有人有解决方案吗?
(顺便说一下,静态属性是受保护的,因此它使用ReflectionClass :: getStaticPropertyValue失败。)
答案 0 :(得分:2)
在不理解任何其他上下文的情况下,您无需实际调用get_called_class
来查看LSB-resolved静态属性。而是使用static
keyword自动解析当前调用的静态类名。
class A {
static $foo = 'from a';
public static function test($property) {
echo static::$$property, "\n";
}
}
class B extends A { static $foo = 'from b'; }
class C extends A { static $foo = 'from c'; }
PHP交互式提示示例:
php > include '/tmp/get_called_class.php'; php > A::test('foo'); from a php > B::test('foo'); from b php > C::test('foo'); from c php >