im глядя на шаблон MVC, и я могу видеть в одном примере на phppatterns, что они передают модель по ссылке – любое преимущество этого в глобальном var? Мне что-то не хватает?
class MyView extends View { var $model; function __construct(&$model){ $this->model =& $model; } function productTable($rownum=1) { $rowsperpage='20'; $this->model->listProducts($rownum,$rowsperpage); while ( $product=$this->model->getProduct() ) { // Bind data to HTML } } }
Любая причина, по которой вы делаете это, как можно использовать глобальную переменную? т.е.
class MyView extends View { global $model; function __construct(){ } function productTable($rownum=1) { $rowsperpage='20'; $model->listProducts($rownum,$rowsperpage); while ( $product=$this->model->getProduct() ) { // Bind data to HTML } }
Проблема с глобальными переменными заключается в следующем:
По другим причинам глобалы и синглтоны являются «злыми» (т.е. просто плохое дизайнерское решение, которое вы никогда не должны делать), читайте, избегайте глобальных переменных, переменных окружения и одиночек .
Да, преимущество заключается в том, что вы можете изменить реализацию модели без необходимости изменять представление.
Я бы предложил использовать другой учебник, тот, который вы используете, немного устарел и не является PHP 5. Тем не менее, вы действительно не должны использовать глобальные переменные, это никогда не будет решением!
Но я действительно не понимаю, почему вы должны даже передать его по ссылке, в PHP 5 он уже передан по ссылке :
class foo { public $a; public function __construct($a) { $this->a = $a; } } $a = new foo(10); $b = $a; $a->a = 20; echo $a->a.' => '.$b->a; // 20 => 20
Если у вас несколько экземпляров модели (похожих), на которые вы, возможно, захотите применить один и тот же вид, вам нужно явно передать экземпляр модели. Глобальная переменная предполагает, что может быть только один экземпляр модели и, следовательно, создает искусственное ограничение.
В общем случае не использовать глобальные переменные лучше, чтобы помочь вам контролировать объем ваших переменных.
Я не буду упоминать, почему это плохо, потому что это уже обсуждалось. Одна вещь, которую, я думаю, вам следует знать, это то, что в коде есть совместимый с PHP 4. В PHP 5 по умолчанию объекты отправляются по ссылке.