1

いくつかの net.tutplus.com チュートリアルに基づいて、php で MVC パターンを使用して簡単なブログを作成しました。私はphpにかなり慣れていないので、これがどのように機能するかを理解するのを手伝ってください。

ここでは、いくつかの単純なファイルに分割しました。3 つのファイル、index.php、index.view.php、function.php 私が知りたいのは、index.view でアクセスできるようにするために、ビュー関数の 2 番目のパラメーターとして $data 配列を渡さなければならない理由です。 .php? ビュー関数の 2 番目のパラメーターとして $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');
}

ビュー関数の 2 番目のパラメーターとして $data 変数をドロップし、インデックス ファイル内でview('index', $data); を置き換えるたびに、ここで少し混乱しています。include('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);

そのコードは機能するはずですが、view()関数からパラメーターを削除すると、$data別の結果が得られます。

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 に答える