我想知道
之间是否有任何区别class TestClass {
private $_var = "abc";
}
VS
class TestClass {
private $_var;
function __construct() {
$this->_var = "abc";
}
}
我想知道后者是否是首选方式/更好的做法?有任何功能差异?
答案 0 :(得分:26)
他们实际上是一样的。我更喜欢前者,因为那时只有一个地方可以查找价值及其默认值。
另一方面,如果您需要对其进行动态处理或将其设置为除数组或基元之外的任何内容,则需要使用第二种形式。值得注意的是,您不能使用函数调用以第一种形式声明变量。
答案 1 :(得分:3)
很棒的问题!我觉得第一个例子更正确,如果你已经知道了对象属性的初始值,为什么要在构造函数中声明它呢?
我觉得构造函数的目的是设置可变的属性。
如果有的话,它似乎是一个可读性的东西。我不知道这两种方法都存在任何性能问题。
答案 2 :(得分:2)
我不知道你的例子有什么不同,它们似乎都表现得一样。如果同时执行这两个操作,构造函数代码将覆盖声明部分中完成的初始化。
我个人来自C ++背景和静态类型语言,所有声明都发生在类的主体内部,但在任何函数之外,所有初始化和其他类准备都发生在构造函数中。
当你的第一个例子中完成初始化并且有一些代码在构造函数中执行某些操作时,对我来说它看起来像混合编码范例,所以即使它更详细,我倾向于选择你的第二个例子自己的代码风格。