2011-09-28 4 views
0

私はテンプレートで利用可能なすべての変数を定義したくない単純なテンプレートシステムを作ろうとしています。例えば。未定義変数を取得せずに未定義変数を呼び出すことは可能ですか?

すべてのページが

<?php displayHTML($variable); ?> 

を持っているだろうが、一部のページのみが、実際に$変数が定義されているだろう。

$variable = "something"; 

付属のfunctions.phpに私は
function displayHTML($variable){ 
if(isset($variable)){ 
echo $variable; 
}else{ 
echo ''; 
     } 
} 

を試してみましたが、エラーは$変数が値に設定されていないのではなく、定義されていないという事実から来ているようです。このエラーは、E_ALLを有効にした場合にのみ表示され、@でシャットダウンしたり、ボード全体に$変数を定義することができます。どのような機能やベストプラクティスでこれを行う必要はありませんか?

は、私は、これは奇妙なようだ知っているが、私はそのつもりページで使用されていない場合は、すべての変数を定義しないようにオプションしたいと思います。

+0

について、よりインテリジェントであるマニュアルエラーハンドラを作成するhttp://php.net/manual/en/function.error-reporting.phpを使用しますか?ハックを避けるためにハックを見つけようとするようなものです。 – Herbert

+0

私は、未定義のエラーがコードを遅くすることがあることを読んだ。私は怠け者でありたいが、私のコードを遅くしない。@を使用しても未定義のエラーの原因となるわずかなパフォーマンスが発生しますか? – chris

答えて

4

各変数を使用する前に定義します。

あなたのテンプレートが存在しない変数を使用しようとしている場合、それはあなたのデザインの論理的な障害である、そしてあなたはそれを修正する必要があります。それはあなたがそれらの値に割り当てる視覚化だ場合

は彼らにいくつかの「デフォルト」または空の値を与えます。未定義それらを残し

は怠惰な、そう言って私を許して、単純にエラーが発生しやすいと。


@エラー抑制剤を使用するように指示する人もいます。これは...根本的な障害に速い、安い、ハックの回避策であるとアドバイスはそれのも明らかステアになります。

+1

+1 "あなたの設計上の論理的な欠陥" – Herbert

+0

私は怠惰は潜在的に偉大なプログラマーの兆候だと思った;)あなたは確かな点を持っていますが、mfondaが悪い習慣である& – chris

2

問題はdisplayHTML()が呼び出されているコードは$variableを参照しようとしていることです。関数内で設定されているかどうかを確認することはできません。関数が呼び出されている場所を設定するかどうかを確認する必要があります:

あなたはそれを変更した場合、あなたのdisplayHTML機能は、通知を省略しないであろう
<?php displayHTML(isset($variable) ? $variable : ''); ?> 
+0

良い答えですが、別のページから関数を参照することで、HTMLを可能な限りきれいにしたいと思います。 – chris

1

function displayHTML(&$variable){ 
... 
} 

これは定義の副作用を持っています変数は未定義ですが、あなたが望むことをするでしょう。あなたがしようとしていることは、テンプレート内のすべての変数が定義されていることを確認する方が良いかもしれません。あるいは、定義されていない可能性のある変数を使う前にプレーンオール 'isset()を使うだけです。

+0

これは非常に興味深く、動作します!なぜ私の努力のためにそれをお勧めしていないのですか? – chris