2012-11-30 41 views
2

我有一个定义了类的常量,它具有通过`const FIRST ='something'定义的几个常量。从存储在另一个类中的实例中访问类常量

我已经实例化的类作为$class = new MyClass()

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

这工作得很好。

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

我试过情况下$this->model::STATE_PROCESSING但我的IDE告诉我

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

和PHP告诉我

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

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

回答

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 

基本上,正在创建一个“吸”功能访问不变。你可以用外部访问私有变量的方式。

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

+0

是的,这样的作品,但尝试创建'ThatClass'和存储在'ThatClass'然后尝试使用该引用访问'ThisClass'常量$类的引用! – Hailwood

+0

@Hailwood我根据你的意见编辑了我的答案。一探究竟。按照我的机器上的预期工作。让我知道我还能如何协助。 – phpisuber01

+0

尝试用'$ this-> model :: FIRST'替换这一行'$ this-> model = $ model;'这就是问题所在,我需要从类内部访问它,这对我来说是崩溃的地方。 – Hailwood

相关问题