Когда мы смотрим на фреймворки Javascript, такие как Dojo, Mootools, jQuery, JS Prototype и т. д., мы видим эти параметры часто определяются с помощью такого массива:
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']);
Есть ли название для этого шаблона и как вы думаете, это плохая практика?
Я оставил проверку и т. Д. В примерах, чтобы не усложнять.