PHP:声明时与实例化时对象属性的初始化

Jos*_*dez 2 php oop

考虑这些类:

class Test_A {

    protected $value;

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

}

class Test_B {

    protected $value = null;

    public function __construct() {

    }

}
Run Code Online (Sandbox Code Playgroud)

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

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

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

记住这一点,在声明时总是初始化属性是否是一个好习惯,除非它们实际上需要计算?

Jon*_*Jon 5

如果它确实依赖于某些计算或运行时值,则应在类构造函数中对其进行初始化。

实际上,如果它依赖于某些计算或运行时值,则必须构造函数初始化。PHP 5.6放宽了此限制,以便涉及编译时已知标量值的表达式将是合法的初始值设定项。

声明时始终初始化属性是一个好习惯吗,除非它们实际上需要计算?

当然,只要你对他们有有意义的价值。如果您没有在声明时显式初始化它们,它们将被隐式设置为null.