2011-09-14 10 views
2

私は次のような構造を持っていたスクリプトがあります。PHPカスタム関数スコープ/良い練習

<?php 
    if(a == b){ 

     function some_function_name(){ 
      // do something here 
     } 

     if(c == d){ 
      some_function_name(); 
     } 
    } 
?> 

を私は(そのsome_function_nameを言うエラーメッセージが表示されます)。存在しない。

私は間違っていますが、この良い習慣は何ですか?

私は何度も使用する必要があるため、同じコードを何度も何度もコピー/ペーストする必要がないため、関数を作成したいと考えています。

+1

必要なすべての機能を作成します。条件付きで作成しようとしないでください。それらが存在するか、存在しない。それを好き嫌いにしないでください。 –

答えて

4

私は、条件付きif()ステートメント内で関数を定義することは避けています。最初にファイルの先頭に関数を定義し、必要に応じて関数を呼び出します。

5

if文で関数を宣言することはできません。

あなたがこれを行うことができます:あなたが機能に入れたい手順の束を持っている場合は、好ましくは、ファイルの先頭または末尾に、if文の外に関数を定義する必要が

<?php 
    function some_function_name() { 
     // do something here 
    } 

    if(a == b && c == d) { 
     some_function_name(); 
    } 
?> 
1

を、または多分別のファイルにあるかもしれません

1

この機能は、複数の場所から使用されるワークフローの正当な部分である場合は、トップレベルの機能(または該当する場合はクラスメソッド)にしてください。 (比較的まれ)あなたは、コールバックとして渡される関数を作成したい場合、この関数の動作で

は、変数の値によって決定されるように、大部分である、あなたはanonymous functionを定義することができます。

$func = function() { 
    // do something here 
} 

if(c == d){ 
    // you can call it like this, but read the above paragraph 
    $func(); 
} 

匿名関数にはPHP> = 5.3が必要です。以前のバージョンを使用している場合はcreate_functionと同じ結果が得られますが、そのような面倒なことはめったにありません。

1

実際には、ifブロックの外側で関数を定義しない理由はありません。このアプローチは非常に誤りがちです。

some_function_name()が最初のifブロックの範囲にバインドされているため、エラーが発生しています。

何度も使用する必要があるため、同じコードを何度も繰り返しコピーする必要がないため、関数を作成したいと考えています。

コピー&ペーストしないでください。これが機能のためのものです。関数を作成し、必要なだけ再利用します。

関連する問題