1

少し奇妙な質問ですが、我慢してください。私は主に学習目的で小さなMVCフレームワークを書いています。ビューをロードするときは、ビューファイルをインクルードしてから使用するだけなextract($data);ので、ビューで変数を使用できます。これは、私のコントローラーでは次のようになります。

// Assign view variables and load the views
$data = array('title' => 'testing the framework',
              'users' => $this->models['Users']->getAllUsers());
$this->loadViews(array('header', 'home', 'footer'), $data);

それは完全に機能しますが、プロジェクトの他の場所にまたはと呼ばれる変数がある場合$title$usersそれらは私が行っているものと競合することにextract()気づきました。これはまだ問題になっていないのですが、問題が発生する前に今すぐ対処する必要があると感じています。

私が見つけた唯一の解決策は、extract()編集される変数にプレフィックスを使用することです。<?php echo $tpl_whatever; ?>だから私は代わりに私のテンプレートでそれらを使うことができます<?php echo $whatever; ?>

誰かアドバイスはありますか?たぶん、変数のスコープを制限する方法はありますか?

ありがとう!

4

2 に答える 2

3

メソッド内の変数のみが競合する可能性があります。変数スコープを参照してください。ただし、そのような場合は、などの追加のフラグを使用して簡単に抽出するEXTR_PREFIX_ALLことで競合を解決できます。

を見てEXTR_PREFIX_SAME、抽出中に起こりうる共謀を解決することEXTR_SKIPもできますEXTR_OVERWRITE

あなたの変数

$name = "Baba";
$array = array("title" => "Restricting variable use to one file",
               "name"  => "James Dawson");

EXTR_PREFIX_ALL

extract($array,EXTR_PREFIX_ALL,"new");
var_dump($new_title,$new_name,$name);
           ^------------------------------ it now has prifix

出力

string 'Restricting variable use to one file' (length=36)
string 'James Dawson' (length=12)
string 'Baba' (length=4)


EXTR_PREFIX_SAME

extract($array, EXTR_PREFIX_SAME, "prifix");
var_dump($name,$title,$prifix_name);
                           ^------------------ Only Conflict has prifix

出力

string 'Baba' (length=4)
string 'Restricting variable use to one file' (length=36)
string 'James Dawson' (length=12)
于 2012-10-21T14:26:02.383 に答える
0

抽出する$data変数はプライベートであるため、他のコントローラーとの競合は発生しません。また、コントローラー関数内で変数が重複している場合は、最後の宣言が使用されます。

于 2012-10-21T14:27:09.760 に答える