0

ファイルやビューなど、いくつかのものをロードするために使用される静的クラスを取得するスクリプトを作成しています。

class load
{
    public static function view($file_path, $area)
    {
        debug::log('getting view <b>' . $area . $file_path . '</b>.');
        ob_start();
        self::file($file_path, 'areas/' . $area . '/views');
        debug::log('flushing view <b>' . $area . $file_path . '</b>.');
        eturn ob_get_clean();
    }

    public static function file($file, $folder)
    {
        if(is_file($file_path = ROOT . '/' . $folder . '/' . $file)) 
        {
            if(require_once $file_path)
            {
                debug::log('file <b>' . $file_path . '</b> included.');
                return true;
            }
        }
        else
            debug::kill('requested file <b>' . $file_path . '</b> does not exist.');
    }   
}

コントローラで、ビューを取得するためにviewメソッドを呼び出します。

$html = load::view('public', 'path/to/view/file.php');

明らかに、この方法を使用してビューファイルのコントローラーから変数にアクセスできないため、変数をキャプチャするためにビュークラスに小さな変更を加えました。

public static function view($file_path, $area, $vars = array())

そして、キーを変数に取り込むために次のコード行を追加しました。

while(list($n_list_var,$v_list_var)=each($vars))
        $$n_list_var = $v_list_var;

しかし、ファイルをロードするメソッドを使用しているため、変数にアクセスできません。

各ファイルのインクルード試行をテストしてログに記録し、ファイルをインクルードする必要があるたびにコードを繰り返さないようにするため、ファイルをロードする方法があります。そして、ローダークラス内にローダービューがあるので、この種のすべてのメソッドを一緒に持っています。クラスを使用してファイルをロードすることをあきらめる必要がありますか?コントローラの拡張可能なクラスでローダービューメソッドを使用する必要がありますか?

先に進んでスクリプト全体を変更する代わりに、いくつかの意見を聞きたいと思います...どのようなベストプラクティスを実行しますか?または、私の問題を解決する方法はありますか?たぶん__setと__getの魔法のメソッドを使用していますか?

ありがとう、

4

1 に答える 1

0

andに$vars引数を渡さないのはなぜですか(おそらく、内部で使用する var をクラス変数に移動して、それらが上書きされないようにします)。load::file()extract( $vars )file()

extract()次の代わりに使用することをお勧めします。

while(list($n_list_var,$v_list_var)=each($vars))
    $$n_list_var = $v_list_var;

ちなみに、クラスに名前を付けるとよいでしょうLoad

于 2012-07-27T23:01:20.003 に答える