我有一个Class,它拥有可以修改的各种属性。 所有属性都定义了默认值。
class Model {
protected $name = 'defaultName';
}
现在我想让全局更改默认值。
我尝试了以下内容:
class Model {
protected static $defaultName = 'defaultName';
protected $name = self::$defaultName;
}
不幸的是,这不起作用:
解析错误:解析错误,期待“”标识符(T_STRING)“'
所以我猜这是因为你不能使用表达式进行初始化或类似的事情? 或者这可以不在构造函数中设置属性值吗?
很抱歉,如果这是重复的,我找不到正确的答案,因为其他一切似乎都集中在初始化静态属性,而我的问题是初始化对象成员。
提前致谢!
答案 0 :(得分:0)
是的,你不能按照你的方式去做,你可以使用__construct()这样做。
以下是示例
class Model
{
protected static $defaultName = 'defaultName';
protected $name = '';
public function __construct()
{
$this->name = self::$defaultName;
}
public function getName()
{
return $this->name ;
}
}
$m = new Model();
echo $m->getName();
// outputs defaultName
答案 1 :(得分:0)
class Model {
protected static $defaultName;
protected $name;
function __construct(){
self::$defaultName = 'defaultName';
$this->name = self::defaultName;
}
}
答案 2 :(得分:0)
所以我猜这是因为你不能使用表达式进行初始化或类似的事情?
是。从5.6开始,您可以更准确地将其表述为“您无法使用动态表达式进行初始化”。
或者,如果不在构造函数中设置属性值,这是否可行?
不,除非你使用类常量而不是静态字段;不幸的是,那些具有副作用,他们可以从课堂外访问。
答案 3 :(得分:0)
试试这个:
class Model {
const CONSTANT = 'my value';
protected static $defaultName = self::CONSTANT;
protected $name = self::CONSTANT;
}