0

重複の可能性:
定数の名前を含む単純な変数を使用してクラス定数にアクセスする

リフレクションを使用して、静的呼び出しの結果として const の配列を送信したい

class ArrowType extends AbstractAttributeType
{
    const NORMAL = 'normal';
    const INV = 'inv';

    static function getPossibleValues()
    {
        $refl = new \ReflectionClass(__CLASS__);
        $class_vars = $refl->getConstants();
        $res = array();
        foreach ($class_vars as $name => $value) {
            $res[] = static::$$name;
        }

        return $res;
    }
}

これは私に与えます

致命的なエラー: 宣言されていない静的プロパティへのアクセス: ArrowType::$NORMAL

私は取得したいです

アロータイプ::ノーマル

$arrowType->getPossibleValues()を呼び出す場合

編集

私の質問をもう少し分かりやすくするために、詳細をお伝えします。私はhttps://github.com/yethee/BiplaneEnumBundleを使用しており、生活を楽にしようとしています。とりあえず、ライブラリの要件を満たすために、以下のコードを作成する必要があります。

class ArrowType extends AbstractAttributeType
{
    const NORMAL = 'normal';
    const INV = 'inv';
    const DOT = 'dot';
    const INVDOT = 'invdot';
    const ODOT = 'odot';
    const INVODOT = 'invodot';
    const NONE = 'none';

    static function getPossibleValues()
    {
        return array(
                    static::NORMAL,
                    static::INV,
                    static::DOT,
                    static::INVDOT,
                    static::ODOT,
                    static::INVODOT,
                    static::NONE
                    );
    }

    static function getReadables()
    {
        return array(
                    static::NORMAL => 'normal',
                    static::INV => 'inv',
                    static::DOT => 'dot',
                    static::INVDOT => 'invdot',
                    static::ODOT => 'odot',
                    static::INVODOT => 'invodot',
                    static::NONE => 'none'
                );
    }

}

私が今達成しようとしているのは、これらの関数を親クラスに配置し、クラスで const 部分を宣言するために、2 つの関数で配列を動的に構築することです。親切な読者が私が何を望んでいるのかを理解するのに役立つことを願っています.

4

1 に答える 1

0

待って、待って、ちょっと待って。

    $class_vars = $refl->getConstants();
    $res = array();
    foreach ($class_vars as $name => $value) {
        ...

あなたはすでにその価値を持っています。すぐそこです。foreach も必要ありません。ただreturn $refl->getConstants()

于 2012-12-13T07:22:27.137 に答える