当人们处理扩展其他类的类并根据类内的特定设置提供功能时,我看到了两种不同的实现。
- 变量用于存储设置。
- 方法用于返回设置。
使用变量:
class Model {
var $fields = array();
function getFields() {
return array_keys($this->fields);
}
function getRules() {
return $this->fields;
}
}
class Person extends Model {
var $fields = array(
'name' => array('maxLength'=>10),
'email' => array('maxLength'=>50, 'validEmail'=>true),
);
}
使用方法:
class Model {
function getFields() {}
}
class Person extends Model {
function getFields() {
return array('name','email');
}
function getRules() {
return array(
'name' => array('maxLength'=>10),
'email' => array('maxLength'=>50, 'validEmail'=>true),
);
}
}
两个例子都达到了相同的结果,我可以做$person->getFields()
和$person->getRules()
之类的事情,但是在方法中-示例 我不喜欢“重复”字段列表,因为这些字段实际上是在 $person->getFields()
和 $person->getRules()
中定义的并且它必须在每次通过该方法请求时计算数组。另一方面,我不喜欢每个对象都将所有设置存储在一个变量中。这似乎是一种资源浪费。所以我只是想知道什么是更好的方法。
我的主要问题是:
- 是否有选择一种方式而不是另一种方式的性能原因? 2)
- 是否有 OOP 逻辑/易于编程/其他原因可供选择 远远超过另一个?
最佳答案
从一些基准测试来看 - 时间非常相似 - 但异常(exception)
return array('name','email');
比
快得多return array_keys($this->fields);
为每种方法运行 10,000 次操作产生了这些平均值:
Variable:
getFields 0.06s
getRules 0.05s
Method:
getFields 0.04s
getRules 0.05s
要回答你的第二个问题 - 这取决于你的用例 - 如果存储在这些对象中的数据是静态的,或者它是否来自另一个数据源/配置文件。
一个后续问题,为什么不使用对象属性?
class Person extends Model {
protected $name
protected $email
public function getName() {
return $this->name;
}
public function getEmail() {
return $this->email;
}
}
关于php - 将 PHP 类设置存储在变量中或从方法中返回它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11759183/