Преимущество перехода по ссылке против использования глобального?

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 } } 

Related of "Преимущество перехода по ссылке против использования глобального?"

Проблема с глобальными переменными заключается в следующем:

  1. Они предполагают, что существует только одна реализация модели и представления.
  2. Они предполагают, что есть только один экземпляр модели и представления (у вас может быть несколько из них в вашем приложении).
  3. Они скрывают взаимозависимость между компонентами; модель очень сильно зависит от вашего взгляда, но не нужно явно передавать модель в ваше представление, что делает ее неявной.

По другим причинам глобалы и синглтоны являются «злыми» (т.е. просто плохое дизайнерское решение, которое вы никогда не должны делать), читайте, избегайте глобальных переменных, переменных окружения и одиночек .

Да, преимущество заключается в том, что вы можете изменить реализацию модели без необходимости изменять представление.

Я бы предложил использовать другой учебник, тот, который вы используете, немного устарел и не является 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 по умолчанию объекты отправляются по ссылке.