1

静的プロパティを参照するために、次のすべてのバリエーションを試しています。

get_called_class()::$$prop

私はこれを試しました:

${get_called_class()}::$$prop

いろいろやってみたのですが、なかなか取れません。

私はこれを行うことができることを知っています:

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

しかし、それは余分なコード行を意味します。確かに、言​​語がこれを同じ行で機能させる方法があるに違いありません。誰にも解決策がありますか?

(ちなみに、静的プロパティは保護されているため、ReflectionClass::getStaticPropertyValue で失敗します。)

4

1 に答える 1

2

ここで追加のコンテキストを理解していなければ、 LSB で解決された静的プロパティget_called_classを突くために実際に呼び出す必要はありません。代わりに、キーワードを使用して、現在呼び出されている静的クラス名を自動的に解決します。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 > include '/tmp/get_called_class.php';
php > A::test('foo');
から
php > B::test('foo');
bから
php > C::test('foo');
cから
php >
于 2013-12-31T19:33:59.317 に答える