我目前的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倍.
如果你正在使用private $data;你,那里只有一个难以理解的数据......如果你想弄清楚一个类是如何工作的,那么明确地说明它们会让你的生活更轻松.
另一个考虑因素是如果您使用具有自动完成功能的IDE - 这不适用于第二种方法.