3

「const FIRST = 'something';」で定義されたいくつかの定数を持つクラスが定義されています。

クラスを次のようにインスタンス化しました$class = new MyClass()

MyClass次に、インスタンスをコンストラクターパラメーターの1つとして受け取り、それを次のように保存する別のクラスがあります$this->model = $myClassInstance;

これはうまくいきます。

しかし、どうすればそのインスタンスから定数にアクセスできるのだろうか?

私はケースを試し$this->model::STATE_PROCESSINGましたが、私のIDEは教えてくれます

静的クラス メンバーへのアクセスが正しくありません。

そしてPHPは私に言います

予期しない '::' (T_PAAMAYIM_NEKUDOTAYIM) ... 内

できることはわかっていますMyClass::STATE_PROCESSINGが、インスタンスに基づいてそれらを取得する方法があるかどうか疑問に思っていますか?

4

1 に答える 1

3

古いバージョンのphpを使用しているようですか?PHP 5.3では、記述した方法で定数にアクセスできます...ただし、これは、その固有の機能なしでそれを行う方法です:

class ThisClass
{
    const FIRST = 'hey';

    public function getFIRST()
    {
        return self::FIRST;
    }
}

class ThatClass
{
    private $model;

    public function setModel(ThisClass $model)
    {
        $this->model = $model;
    }

    public function getModel()
    {
        return $this->model;
    }
    
    public function Hailwood()
    {
        $test = $this->model;
        return $test::FIRST;
    }
}

$ThisObject = new ThisClass();
echo $ThisObject ->getFIRST(); //returns: hey
echo $ThisObject ::FIRST; //returns: hey; PHP >= 5.3

// Edit: Based on OP's comments
$ThatObject= new ThatClass();
$ThatObject->setModel($Class);
echo $ThatObject->getModel()->getFIRST(); //returns: hey
echo $ThatObject->Hailwood(); //returns: hey

基本的に、定数にアクセスするための「ゲッター」関数を作成していました。プライベート変数に外部からアクセスするのと同じ方法です。

OOP クラス定数のドキュメントを参照してください: http://php.net/manual/en/language.oop5.constants.php

于 2012-11-30T02:26:04.497 に答える