当我们查看Javascript框架(如Dojo、Mootools、jQuery、JS原型等)时,我们看到选项通常是通过如下数组定义的:
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']);这种模式有名字吗?你认为这是一种不好的做法吗?
为了保持简单,我在示例中保留了验证等内容。
发布于 2010-12-28 22:34:48
如果有强制选项,它们应该在构造函数的参数列表中。然后添加带有默认值的可选选项。
public function __construc($mandatory1, $mandatory2, $optional1="value", $optional2="value") { }如果您的所有选项都是可选的,那么创建一个接受数组的构造函数是有用的。创建对象比使用“普通构造函数”更容易:您可以只提供所需的选项,而如果要提供$optional2,则必须提供$optional1 (甚至将其设置为默认值)。
https://stackoverflow.com/questions/4550046
复制相似问题