问题很简单。我怎么能使用像$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
类似于。
随意编辑标题,我真的不知道该如何命名!
答案 0 :(得分:1)
$x = A::a;
echo $obj->$x;
答案 1 :(得分:1)
这只是因为B类没有任何名为A的公共属性。因此您无法访问它,这是您通过$obj->A
尝试做的事情。如果您在执行$obj->methodA()->methodB()
之类的操作时考虑调用顺序,这是合乎逻辑的。
访问它的正确方法是$obj->{A::a}
。
答案 2 :(得分:0)
我自己找到了答案。
答案非常简单。只需将{}
添加到const
(A::a
),就像这样:
echo $obj->{A::a};