什么';在PHP中存储类变量的最佳方法是什么?
我目前的PHP类变量设置如下:什么';在PHP中存储类变量的最佳方法是什么?,php,variables,Php,Variables,我目前的PHP类变量设置如下: class someThing { private $cat; private $dog; private $mouse; private $hamster; private $zebra; private $lion; //getters, setters and other methods } 但我也见过人们使用单个数组来存储所有变量: class someThing { private
class someThing {
private $cat;
private $dog;
private $mouse;
private $hamster;
private $zebra;
private $lion;
//getters, setters and other methods
}
但我也见过人们使用单个数组来存储所有变量:
class someThing {
private $data = array();
//getters, setters and other methods
}
你用哪一种,为什么?每种方法的优缺点是什么?如果您使用的是
私有$data代码>那里有一个无法穿透的数据块。。。如果你想弄清楚一个类是如何工作的,那么明确地说明它们会让你的生活变得更加轻松
另一个需要考虑的问题是,如果您使用带有自动完成功能的IDE,那么第二种方法将不起作用。如果代码是重复的,那么数组和(foreach)循环会使事情变得整洁。您需要确定代码中的“动物”概念是否重复,或者代码是否需要挖掘每个成员的唯一性
如果我必须重复不止一次,我会循环。一般来说,第一个更好,因为其他人已经在这里说明了原因
但是,如果您需要在类上私下存储数据,但数据成员的占用空间未知,那么您经常会看到第二个示例与_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;
}
}
然后,这个类的对象可以像stdClass的实例一样使用,只有您设置的所有成员实际上都不是公共的
$o = new someThing()
$o->cow = 'moo';
$o->dog = 'woof';
// etc
这项技术有其用途,但请注意uu get()和u set()的速度大约是直接设置公共属性的10-12倍。我更喜欢第一种方法,原因如下:
在一个好的IDE中,即使是私有/受保护的,也会显示类属性
更容易查看已定义的内容,从而减少两次存储相同信息的机会。
如果你在回家的路上遇到了众所周知的总线,那么其他开发人员进来阅读你的代码就简单多了。
虽然它不适用于私有变量,但它适用于受保护的变量,在扩展这个类的类中,为了纯粹的可读性,您确实应该避免使用第二种方法
另外,作为旁注,我几乎总是选择受保护而不是隐私,除非我有一个非常具体的理由让它成为隐私
我唯一可能使用第二种方法的时候是,如果我正在存储一种东西的许多集合。
- 当您知道需要该变量时,请使用第一种方法李>
- 当您需要动态变量时,请使用第二种方法(变量的数组集合)
您可以将这两种方法结合起来,因此一些变量是硬编码到类中的,而另一些是动态的。与magic方法相比,硬编码变量具有更高的优先级