[英]PHP5. Two ways of declaring an array as a class member
将数组声明为类成员时,应该采用哪种方式?
class Test1 {
private $paths = array();
public function __construct() {
// some code here
}
}
要么
class Test2 {
private $paths;
public function __construct() {
$this->paths = array();
// some code here
}
}
在良好实践和绩效方面哪一个更好? 你会推荐什么?
我建议在声明一个类变量时这样做。 构造函数可以在扩展类中重写,如果你的任何函数依赖于这个变量是一个数组(甚至是一个空数组),这可能会导致E_NOTICEs甚至E_WARNINGs
如果要在初始化期间动态填充数组,请在构造函数中执行此操作。 如果它包含固定值,请在属性声明中执行。
尝试在声明中动态填充数组(例如,通过使用某个函数或方法的返回值)会导致解析错误:
// Function call is not valid here
private $paths = get_paths();
由于每个都有自己的用例,因此性能不是真正关注的问题。
一般来说,因为除了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是一个实例属性,我可以从其他地方访问它。
没有性能影响。 停止痴迷于无关紧要的事情 - 专注于存在的性能问题:首先衡量,只优化最高级别的违规者。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.