我试图通过使用常量来访问一个类对象的数据成员。我想知道这是否可能使用类似于我正在使用的语法?
当我尝试在以下脚本中执行此操作时,我收到此错误:解析错误:语法错误,意外T_PAAMAYIM_NEKUDOTAYIM
class Certificate {
const BALANCE = 'cert_balance';
public function __construct() {}
}
class Ticket {
public $cert_balance = null;
public function __construct()
{
$this->cert_balance = 'not a chance';
echo $this->cert_balance."<br />";
}
}
$cert = new Certificate();
$ticket = new Ticket();
// This next code line should be equal to: $ticket->cert_balance = 'nice';
$ticket->$cert::BALANCE = 'nice!';
答案 0 :(得分:7)
您需要使用大括号消除表达式的歧义。此外,在PHP 5.3之前,您需要通过类名引用常量,如下所示:
$ticket->{Certificate::BALANCE} = 'nice!';
PHP manual section on class constants说明了这个
从PHP 5.3.0开始,可以使用变量
引用该类
因此,在PHP 5.3.0及更高版本中,这将起作用:
$ticket->{$cert::BALANCE} = 'nice!';
答案 1 :(得分:3)
执行:
$ticket->{$cert::BALANCE} = 'nice';
因此解析器知道它必须首先处理$cert::BALANCE
。您似乎需要PHP 5.3才能使用此功能。否则,请使用classname而不是$cert
。
重点是你必须将它放入{}
。