在PHP中存储类变量的最佳方法是什么?

Phi*_*ton 10 php variables

我目前的PHP类变量设置如下:

class someThing {

    private $cat;
    private $dog;
    private $mouse;
    private $hamster;
    private $zebra;
    private $lion;

    //getters, setters and other methods
}
Run Code Online (Sandbox Code Playgroud)

但我也看到人们使用单个数组来存储所有变量:

class someThing {

    private $data = array();

    //getters, setters and other methods
}
Run Code Online (Sandbox Code Playgroud)

你用哪个,为什么?各有哪些优缺点?

Pet*_*ley 12

一般来说,第一个更好,因为其他人已经在这里说过.

但是,如果您需要私有地在类上存储数据,但数据成员的占用空间未知,您通常会看到第二个示例与__get()__ set()挂钩以隐藏它们是私有存储的.

class someThing {

    private $data = array();

    public function __get( $property )
    {
        if ( isset( $this->data[$property] ) )
        {
            return $this->data[$property];
        }
        return null;
    }

    public function __set( $property, $value )
    {
        $this->data[$property] = $value;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,此类的对象可以像stdClass的实例一样使用,只有您设置的成员实际上不是公共的

$o = new someThing()
$o->cow = 'moo';
$o->dog = 'woof';
// etc
Run Code Online (Sandbox Code Playgroud)

此技术有其用途,但请注意__get()和__set()比直接设置公共属性的速度快10-12倍.


Gre*_*reg 6

如果你正在使用private $data;你,那里只有一个难以理解的数据......如果你想弄清楚一个类是如何工作的,那么明确地说明它们会让你的生活更轻松.

另一个考虑因素是如果您使用具有自动完成功能的IDE - 这不适用于第二种方法.