我有一个简短的标题和消息,我要展示,定义以下内容:
class A {
public $name = 'Mark';
public $entry = array(
'title' => 'Some title',
'message' => 'Hi '.$name
);
// Constructor
public function __construct() {}
// Some other functions
}
这不起作用。
有人可以解释原因吗?我应该改为使用单独的变量还是有更好的方法?谢谢你的时间。
修改
答案 0 :(得分:2)
你试图在一个班级的财产申报中取消,不是吗?属性声明在COMPILE-TIME期间发生,并且只能接受值,而不是需要RUN-TIME发生的操作,并且连接肯定是运行时操作...而是将该行放入构造函数方法中。
class A
{
public $name = 'Mark';
public $entry = array("test");
public $var1 = someFunct(); // WRONG, ITS AN OPERATION and REQUIRES RUNTIME
public $var2 = 1 + 2; // WRONG, ITS AN OPERATION and REQUIRES RUNTIME
public $var3 = CLASS_NAME::SOME_CONSTANT_OR_PROPERTY_HERE; // WORKS, CONSTANTS ARE DETECTED IN COMPILE-TIME
public $var4 = $anythingWithDollarSign; // WRONG, SYNTAX ERROR, REQUIRES RUNTIME
public function __construct() {
$this->entry = array( 'title' => 'Some title', 'message' => 'Hi ' . $this->name );
}
}
答案 1 :(得分:0)
在类中,您只能声明由静态值组成的变量,而不能声明"name" . $name
等动态值。
你需要做的是构造函数中的concat,(这就是它的原因):
class A
{
public $name = 'Mark';
public $entry = array(
'title' => 'Some title',
'message' => 'Hi %s'
);
// Constructor
public function __construct()
{
$this->entry["message"] = sprintf($this->entry["message"],$this->name);
}
}