3

我定义了一个类,它有几个通过 `const FIRST = 'something'; 定义的常量;

我已经将该类实例化为$class = new MyClass()

然后我有另一个类,它将一个MyClass实例作为它的构造函数参数之一并将其存储为$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

基本上,正在创建一个“getter”函数来访问常量。与外部访问私有变量的方式相同。

请参阅 OOP 类常量文档: http: //php.net/manual/en/language.oop5.constants.php

于 2012-11-30T02:26:04.497 回答