我应该将变量放在类还是构造函数中? PHP

Posted

技术标签:

【中文标题】我应该将变量放在类还是构造函数中? PHP【英文标题】:Should I place variables in class or constructor? PHP 【发布时间】:2011-03-31 22:10:21 【问题描述】:

我的问题是 OOP 的最佳实践之一。我正在使用 Codeigniter 框架/php

我有一堂课:

class Test() 

    var $my_data = array();

    function my_function() 

        //do something

    


这样在类中声明 $my_data 可以吗?还是应该进入构造函数?基本上每个函数都会写入 $my_data 所以从某种意义上说它是一个类范围的变量(全局?,不确定术语)

另外,我应该使用 var 还是 private ?是否不推荐使用 var 以支持声明变量范围?

【问题讨论】:

有什么理由你还在使用 PHP4 语法? 【参考方案1】:

如果您希望$my_data 可用于Test 中的所有方法,您必须在类级别声明它。

class Test 

    private $my_data1 = array(); // available throughout class

    public function __construct() 
        $my_data2 = array(); // available only in constructor
    


var 已弃用,与 public 同义。如果$my_data 不需要在Test 之外可用,则应将其声明为private

【讨论】:

你不能也像这样声明它们:$this->my_data = array();在课堂上的任何地方都可以使用它吗? @evilchookie - 是的,但最好在顶部有一个正在使用的变量列表【参考方案2】:

如果它属于“类”,则将其放在类中。如果它属于“类的实例”,则将其放入构造函数中。不过,听起来您应该使用会话。

【讨论】:

【参考方案3】:

如果你在构造函数之外声明变量就很好。 实际上,codeigniter 不会让您在构造函数中提供任何参数。 当类被实例化时,变量将自动赋值。 默认情况下,类中的任何 php 变量和函数都将具有公共访问权限。 我真的不需要在 codeigniter 上使用访问修饰符。 它自己的库没有定义任何访问修饰符。

【讨论】:

以上是关于我应该将变量放在类还是构造函数中? PHP的主要内容,如果未能解决你的问题,请参考以下文章

我应该在声明中还是在构造函数中实例化实例变量?

php trait 有构造函数吗

C++中如何在子类的构造函数中调用基类的构造函数来初始化基类成员变量

我应该将啥类型添加到作为参数接收的类构造函数中?

C ++复制构造函数中的异常[关闭]

定义子类对象时要先调用基类构造函数,是应该哪样理解呢