从存储在另一个类中的实例访问类常量

时间:2012-11-30 02:10:24

标签: php oop class object static

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

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

然后我有另一个类,它将MyClass实例作为其构造函数参数之一,并将其​​存储为$this->model = $myClassInstance;

这很好用。

但我想知道如何从该实例访问常量?

我试过案例$this->model::STATE_PROCESSING,但我的IDE告诉我

  

对静态类成员的访问不正确。

和PHP告诉我

  

意外的'::'(T_PAAMAYIM_NEKUDOTAYIM)......

我知道我可以做MyClass::STATE_PROCESSING,但我想知道是否有办法让他们基于实例?

1 个答案:

答案 0 :(得分:2)

好像你的旧版本的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;
    }
}

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

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

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

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