我不知道是否有VSPHP初始化变量在__construct()对声明
class TestClass {
private $_var;
function __construct() {
$this->_var = "abc";
}
}
我不知道是否是后者的优选方式/更好的做法
class TestClass {
private $_var = "abc";
}
之间的任何差异?有没有功能差异?
我不知道是否有VSPHP初始化变量在__construct()对声明
class TestClass {
private $_var;
function __construct() {
$this->_var = "abc";
}
}
我不知道是否是后者的优选方式/更好的做法
class TestClass {
private $_var = "abc";
}
之间的任何差异?有没有功能差异?
它们实际上是一样的。我更喜欢前者,因为那时只有一个地方可以查找价值及其默认值。另一方面,如果你需要对它做一些动态的处理,或者将它设置为除数组或基元以外的其他任何东西,则需要使用第二种形式。值得注意的是,您不能使用函数调用以第一种形式声明变量。
嗯,我想解释它,第一种方法只能用于简单实例化,第二个是如果需要复杂处理,例如。函数调用或if/else等 – 2010-07-09 04:08:31
我认为另一个更好的理由更喜欢前者,即使扩展类并覆盖构造函数,默认值仍将保留。 – Adam 2017-11-28 21:02:21
优秀的问题!我觉得第一个例子更加正确,如果你已经知道对象属性的初始值,为什么要在构造函数中声明它?
我觉得构造函数的目的是设置可能是可变的属性。
如果有的话,它看起来像一个可读性的东西。我不知道任何一种方法的性能问题。
我不知道你的例子有什么不同,它们看起来都表现得一样。如果两者都执行,构造函数代码将覆盖声明部分中完成的初始化。我个人来自C++背景,在静态类型语言中,所有声明都发生在类的主体内部,但在任何函数之外,并且所有的初始化和其他类的准备都发生在构造函数内部。
当你的第一个例子完成初始化,并且有一些代码在构造函数中做某些事情时,对我来说它看起来像混合编码范例,所以即使它更冗长,我倾向于选择第二个例子我自己的代码风格。
fwiw - actionscript警告初始化类的声明中的对象。所以虽然'private $ _var =“abc”'可能是可以接受的,private private _var = new SpecializedClass();'不会是 – 2010-07-09 03:49:16
即使很多开发人员也可能会混淆这个。使用构造函数进行动态初始化。这是一个类似的线程http://stackoverflow.com/questions/7088585/initializing-class-member-variables-with-expressions-concatenated-string-in-ph – kta 2013-10-22 01:51:56