我正在查看MVC模式,我可以在one example on phppatterns中看到他们通过引用传递模型 - 在全局变量上执行此操作的任何好处?我错过了一些明显的东西吗?
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
}
}
答案 0 :(得分:4)
全局变量的问题是:
出于其他原因,为什么全局和单身人士是“邪恶的”(即你真的不应该做出糟糕的设计决定),请阅读avoid global variables, environment variables, and singletons。
答案 1 :(得分:3)
是 - 优点是您可以更改模型的实现,而无需修改视图。
答案 2 :(得分:2)
我建议使用另一个教程,你正在使用的教程有点过时了,不是 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
答案 3 :(得分:1)
如果您有多个(类似的)模型实例,您可能希望在其上应用相同的视图,则需要显式传递模型实例。全局变量假设可能只有一个模型实例,因此产生了一个人为的限制。
答案 4 :(得分:0)
通常,不使用全局变量可以帮助您控制变量的范围。
答案 5 :(得分:0)
我不会提到为什么这是一件坏事,因为它已经讨论过了。我认为您应该知道的一件事是,那里提供的代码与PHP 4兼容。在PHP 5中,默认情况下,对象通过引用发送。