0

クラス (オブジェクトではない) を変数に割り当てる必要があります。Java などの他のプログラミング言語ではこれが非常に簡単であることは知っていますが、PHP でこれを実現する方法が見つかりません。

これは私がやろうとしていることのスニペットです:

class Y{

    const MESSAGE = "HELLO";

}

class X{

    public $foo = Y; // <-- I need a reference to Class Y

}

$xInstance = new X();
echo ($xInstance->foo)::MESSAGE; // Of course, this should print HELLO
4

3 に答える 3

3

PHP では、クラスへの参照を変数に格納することはできません。したがって、クラス名で文字列を保存し、constant()関数を使用します

class Y{

    const MESSAGE = "HELLO";

}

class X{

    public $foo = 'Y';

}

$xInstance = new X();
echo constant($xInstance->foo . '::MESSAGE'); 
于 2013-03-03T22:34:45.607 に答える
0

リフレクションを使用してそれを見つけることができます ( Can I get CONST's defined on a PHP class? を参照)。または、次のようなメソッドを使用できます。

<?php

class Y
{
    const MESSAGE = "HELLO";
}

class X
{
    function returnMessage()
    {
        return constant("Y::MESSAGE");
    }
}

$x = new X();
echo $x->returnMessage() . PHP_EOL;

編集 -オーバーロードを使用してこの動作をエミュレートし、ユーザー定義メソッドによって処理されるプロパティまたは静的プロパティにアクセスできることも指摘する価値があります

于 2013-03-03T22:36:55.330 に答える
0

通常の文字列を処理するのと同じように、クラスへの参照を処理できることがわかりました。以下が最も簡単な方法のようです。

注: 次のスニペットでは、読みやすくするために、質問に示されているものにいくつかの変更を加えました。

class Y{
    const MESSAGE="HELLO";

    public static function getMessage(){
        return "WORLD";
    }

}
$var = "Y";
echo $var::MESSAGE;
echo $var::getMessage();

これにより、定数および/または静的フィールドまたはメソッドの両方にアクセスするための統一されたメカニズムが提供されます。

于 2013-03-04T01:53:37.630 に答える