如何使用$ obj-> A :: a而不是$ obj-> $ b

时间:2016-07-08 12:26:53

标签: php

问题很简单。我怎么能使用像$obj->A::a这样的东西,其中A::a是一个常量字符串,它是obj属性之一的名称?

让我们看看这个简单的代码:

class A{
 const a='b';
}
class B{
    public $b='somthing';
}

$k='b';
$obj=new B();

现在这两个代码都相同:

var_dump(A::a);  //==string(1) "b"
var_dump($k);    //==string(1) "b"

现在我可以使用下面的代码,     echo $ obj-> $ k; //输出是:somthing 但是这段代码不起作用:

echo $obj->A::a; //Error

我需要类似于上面代码的东西,因为我有很多const类似于。

随意编辑标题,我真的不知道该如何命名!

3 个答案:

答案 0 :(得分:1)

你的意思是:

$x = A::a;
echo $obj->$x;

答案 1 :(得分:1)

这只是因为B类没有任何名为A的公共属性。因此您无法访问它,这是您通过$obj->A尝试做的事情。如果您在执行$obj->methodA()->methodB()之类的操作时考虑调用顺序,这是合乎逻辑的。

访问它的正确方法是$obj->{A::a}

答案 2 :(得分:0)

我自己找到了答案。 答案非常简单。只需将{}添加到constA::a),就像这样:

echo $obj->{A::a};