PHP:在实例化时声明vs时初始化对象属性

时间:2014-01-28 16:36:41

标签: php oop

考虑这些课程:

class Test_A {

    protected $value;

    public function __construct() {
        $this->value = null;
    }

}

class Test_B {

    protected $value = null;

    public function __construct() {

    }

}

我想知道哪一个被认为是初始化对象属性的最佳实践以及原因。

两者在语法上都是正确的,根据PHP手册,只有在值不依赖于任何计算时才能声明属性(受保护的$ a = a + b;)。如果它确实依赖于某些计算或运行时值,则应在类构造函数中初始化它。

参考: http://www.php.net/manual/en/language.oop5.properties.php(参见示例#1)

记住这一点,除非确实需要计算,否则在声明时始终初始化属性是一个好习惯吗?

1 个答案:

答案 0 :(得分:4)

  

如果它确实取决于某些计算或运行时值,则应该是   在类构造函数中初始化。

实际上,如果它取决于某些计算或运行时值,必须由构造函数初始化。 PHP 5.6 relaxes this restriction以便在编译时知道标量值的表达式将是合法的初始化器。

  

在声明时始终初始化属性是一种好习惯   除非他们确实需要计算?

当然,只要你有一个有意义的价值。如果您没有在声明中显式初始化它们,则会隐式设置为null