1

我正在尝试以下每个变体来引用静态属性:

get_called_class()::$$prop

我试过这个:

${get_called_class()}::$$prop

我已经尝试了很多东西,但似乎无法得到它。

我知道我可以这样做:

$className = get_called_class();
$className::$$prop

但是,这意味着额外的代码行。当然,语言必须有一种方法可以使这项工作在同一条线上工作。有人有解决方案吗?

(顺便说一下,静态属性是受保护的,所以它会因 ReflectionClass::getStaticPropertyValue 而失败。)

4

1 回答 1

2

在此处不了解任何其他上下文的情况下,您不需要实际调用get_called_class来戳LSB 解析的静态属性。相反,使用static关键字自动解析当前调用的静态类名。

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 > 包括'/tmp/get_call_class.php';
php > A::test('foo');
从一个
php > B::test('foo');
从 b
php > C::test('foo');
从 c
php >
于 2013-12-31T19:33:59.317 回答