繁体   English   中英

PHP5。 将数组声明为类成员的两种方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM