Неправильно ли определять параметры класса через массив?

Когда мы смотрим на фреймворки 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']);

Есть ли название для этого шаблона и как вы думаете, это плохая практика?

Я оставил проверку и т. Д. В примерах, чтобы не усложнять.

5
задан Chris Laplante 11 May 2013 в 16:00
поделиться