1

我根据一些 net.tutplus.com 教程在 php 中使用 MVC 模式制作了一个简单的博客。不过,我对 php 很陌生,所以请帮助我了解它是如何工作的。

我在这里把它分解成几个简单的文件。3 个文件,index.php、index.view.php 和 function.php 我想知道的是为什么我必须将我的 $data 数组作为视图函数中的第二个参数传递才能在我的 index.view 上访问它.php?如果我将 $data 作为视图函数中的第二个参数删除,我会得到未定义的变量,并且无法在我的 index.view.php 页面上访问 $data。

索引.php

<?php

require('function.php');    
$data = array('item0', 'item1', 'item3');    
view('index', $data);

index.view.php

<?php
    foreach($data as $item) {
        echo $item;
    }
?>

函数.php

function view($path, $data) {
    include($path . '.view.php');
}

我在这里有点困惑,因为每当我从视图函数中删除 $data 变量作为第二个参数并在我的索引文件中替换view('index', $data); 包含('view.index.php');$data 变量正像预期的那样从 index.php 传递到 index.view.php。

但是当我在没有 $data 参数的情况下放回视图函数时,我得到了未定义的变量数据。我认为我的视图函数与include('view.index.php');完全相同。?

希望这是有道理的,有人可以向菜鸟解释发生了什么,否则我会尝试改写一下。

4

3 回答 3

3

将包含视为复制和粘贴调用包含的代码主体。

如果您复制并粘贴所有包含和要求所在的代码主体,您会得到:

function view($path, $data) {
    foreach($data as $item) {
        echo $item;
    }
}  
$data = array('item0', 'item1', 'item3');
view('index', $data);

该代码应该可以工作,但是如果您$data从 view() 函数中删除参数,则会得到不同的结果:

function view($path) {
    // $data doesn't exist here, not local to the function.
    // The foreach() loop therefore is trying to access $data variable which doesn't exist.
    foreach($data as $item) {
        echo $item;
    }
}
$data = array('item0', 'item1', 'item3');    
view('index');
于 2013-03-17T22:48:50.247 回答
2

我认为我的视图函数与 include('view.index.php'); 完全一样?

正如你已经证明的那样,事实并非如此。

<?php
$data = array('item0', 'item1', 'item3');    
include('view.index.php');

在这个例子中,看到的变量范围.view.index.php{$data}

<?php
$foo = "hello world"; // note this extra variable
$data = array('item0', 'item1', 'item3');    
view('index', $data);
function view($path, $data) {
    include($path . '.view.php');
}

在这个例子中,view.index.php看到的变量范围是{$path, $data}. 这是因为include发生在函数的范围内。

<?php
$data = array('item0', 'item1', 'item3');    
view('index');
function view($path) {
    include($path . '.view.php');
}

因此,在此示例中,变量范围view.index.php{$path}.

于 2013-03-17T22:50:22.157 回答
-1

您必须设置默认值才能允许调用view('index');

function view($path, $data = array()) {
    // Do some stuff
    include($path . '.view.php');
}

如果你想让你的全局变量在你的函数中可见,使用global

function view($path) {
    global $data;
    include($path . '.view.php');
}
于 2013-03-17T22:50:17.517 回答