使用静态属性初始化对象属性

时间:2014-01-02 11:48:20

标签: php properties static initialization member

我有一个Class,它拥有可以修改的各种属性。 所有属性都定义了默认值。

class Model {
    protected $name = 'defaultName';
}

现在我想让全局更改默认值。

我尝试了以下内容:

class Model {
    protected static $defaultName = 'defaultName';
    protected $name = self::$defaultName;
}

不幸的是,这不起作用:

  

解析错误:解析错误,期待“”标识符(T_STRING)“'

所以我猜这是因为你不能使用表达式进行初始化或类似的事情? 或者这可以不在构造函数中设置属性值吗?

很抱歉,如果这是重复的,我找不到正确的答案,因为其他一切似乎都集中在初始化静态属性,而我的问题是初始化对象成员。

提前致谢!

4 个答案:

答案 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;
}