Когда мы взглянем на 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']);
Есть ли название для этого паттерна, и вы думаете, что это плохая практика?
Я оставил проверку и т. Д. В примерах для простоты.