将数组声明为类成员时,应该采用哪种方式?
class Test1 {
private $paths = array();
public function __construct() {
// some code here
}
}
或
class Test2 {
private $paths;
public function __construct() {
$this->paths = array();
// some code here
}
}
哪一项在良好做法和表现方面更好?你会推荐什么?
答案 0 :(得分:10)
我建议在声明一个类变量时这样做。构造函数可以在扩展类中重写,如果你的任何函数依赖于这个变量是一个数组(甚至是一个空数组),这可能会导致E_NOTICEs甚至E_WARNINGs
答案 1 :(得分:6)
如果要在初始化期间动态填充数组,请在构造函数中执行此操作。如果它包含固定值,请在属性声明中执行。
尝试在声明中动态填充数组(例如,通过使用某个函数或方法的返回值)会导致解析错误:
// Function call is not valid here
private $paths = get_paths();
性能不是真正关注的问题,因为每个都有自己的用例。
答案 2 :(得分:6)
一般来说,因为除了PHP之外我主要使用其他语言编写,所以我喜欢在构造函数之外声明我的实例变量。这让我看一下类的顶部并了解所有属性及其访问修饰符,而无需阅读代码。
例如,我真的不喜欢这样的方法
// ...
// whole bunch of code
// ...
public function initialize() {
$this->foo = array();
// some other code to add some stuff to foo
}
现在,如果我只是看一下课程,我不能确定有一个变量foo甚至可用。如果有,我不知道我是否可以从实例外的任何地方访问它。
如果我有:
public $foo = array();
在我的班级顶部,我知道foo是一个实例属性,我可以从其他地方访问它。
答案 3 :(得分:1)
没有性能影响。停止痴迷于无关紧要的事情 - 专注于存在的性能问题:首先衡量,只优化最高级别的违规者。