2

静的クラスメソッドを介して含まれているファイルで変数を取得する際に問題が発生しました。

one.php:

require_once("classes/tools.class.php");

$variable = "variable";

Tools::setView("test");

tools.class.php:

class Tools{    

    public static function setView($viewName){
        if(!is_file("views/" . $viewName . ".php")){
            echo "Chyba pri nacitani view: \"$viewName\" v " . $_SERVER["SCRIPT_NAME"];
            die();
        }
        else{           
            include "views/" . $viewName . ".php";
        }

    }

}

view / test.php:

echo $variable;

「エコー」の後、「未定義の変数」エラーが発生しました。

誰かがこの問題を手伝ってくれませんか?

ありがとう!

4

1 に答える 1

2

仕組みを理解する必要がありますvariable scope。この場合、ビュー スクリプトは関数内で実行されており、関数はグローバル スコープ内の変数にアクセスできないため、変数はビュー スクリプト内に表示されません。関数内で変数をグローバルとして宣言することもできますが、それはお勧めできません。また、どの変数が設定されるかを前もって知らない場合は実用的ではありません。

理想的には、ビュー スクリプトによって使用される変数を、ビューを設定する呼び出しに挿入する必要があります。おそらく次のようなものです:

public static function setView($viewName, $vars) {

    // loop through the passed vars and set them in the local scope
    extract($vars);

    // render the view
    include "views/" . $viewName . ".php";
}

次に、setView を呼び出すときに変数を渡します。

$vars = array(
    'one' => 1,
    'two' => 2
);
Tools::setView('test', $vars);

これにより、関数スコープ内に名前付きの変数が作成され、ビュー スクリプトで通常どおり使用でき$oneます。$twoさらに、プログラムに偶然存在する可能性のある他の偶発的な変数によってビューが「汚染」されるのを防ぎます。つまり、メソッド呼び出しに明示的に渡す変数だけがビュー スクリプトで使用できます。

于 2012-09-23T16:39:06.990 に答える