当我们看到像Dojo、Mootools、jQuery、JS Prototype等Javascript框架时,我们会发现选项通常是通过这样的数组定义的:
dosomething('mainsetting',{duration:3,allowothers:true,astring:'hello'});
在编写PHP类时实现相同的想法是否是一种不良实践?
一个例子:
class Hello {
private $message = '';
private $person = '';
public function __construct($options) {
if(isset($options['message'])) $this->message = $message;
if(isset($options['person'])) $this->person = $person;
}
public function talk() {
echo $this->person . ' says: ' . $this->message;
}
}
常规做法:
class Hello {
private $message = '';
private $person = '';
public function __construct() {}
public function setmessage($message) {
$this->message = $message;
}
public function setperson($person) {
$this->person = $person;
}
public function talk() {
echo $this->person . ' says: ' . $this->message;
}
}
第一个示例的优点是您可以传递尽可能多的选项,而类仅会提取它所需的选项。
例如,从JSON文件中提取选项时,这可能非常方便:
$options = json_decode($options);
$hello = new Hello($options);
这是我经常采取的做法:
$options = json_decode($options);
$hello = new Hello();
if(isset($options['message'])) $hello->setmessage($options['message']);
if(isset($options['person'])) $hello->setperson($options['person']);
这种模式有一个名称吗?您认为这是一种不好的实践吗?
我在示例中保留了验证等内容,以使其简单。