【发布时间】:2011-05-31 19:20:42
【问题描述】:
当我们查看 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']);
这种模式有名称吗?您认为这是一种不好的做法吗?
为了简单起见,我在示例中保留了验证等。
【问题讨论】:
-
我不这么认为,它被广泛使用的是Drupal CMS!
-
谢谢!很高兴知道这么大的名字正在使用它。
-
IIRC 认为 JS 语法不是一个数组,而是一个对象的“序列化”表示(它一直在例如 JSON 中使用)。
-
它被称为统一构造函数:paul-m-jones.com/archives/1113
-
@scoates:你确定吗? PHP 对“统一构造函数”有自己的定义:php.net/manual/en/language.oop5.decon.php
标签: php class settings options