2011-01-16 4 views
8

クラスメソッドの中で関数を作成することは可能ですか?どのように呼び出すのですか?php:クラスメソッド内で関数を作成して呼び出すことはできますか?

 
class Foo 
{ 
    function bar($attr) 
    { 
     if($attr == 1) 
     { 
      return "call function do_something_with_attr($attr)"; 
     } 
     else 
     { 
      return $attr; 
     } 

     function do_something_with_attr($atr) 
     { 
      do something 
      ... 
      ... 
      return $output; 
     } 
    } 
} 

すなわち

はそれを行うことができますが、関数はグローバルスコープで定義されているので、この方法は、PHPエンジン以来2回呼び出された場合、これはエラーになります事前

+0

を同じには、通常の(おそらく静的)クラスメソッドを使用して達成することができませんでしたか? –

+0

あなたの助けを借りてありがとう – m1k3y3

答えて

6

でお願いします2番目の呼び出し中に関数を再定義することを検討します。

+1

Ignacioが書いたように、私はエラーが発生していますが、それは、function_exists()のトリビアで解決することができます。 – zerkms

+0

Zerkms、function_exists()で解決する方法を詳しく説明できますか? - ありがとうございました。 – m1k3y3

+0

PHPドキュメントは素晴らしいことですhttp://php.net/manual/en/function.function-exists.php – Scuzzy

1

"function_exists"を使用すると、エラーを回避できます。

class Foo 
{ 
    function bar($attr) 
    { 

     if (!function_exists("do_something_with_attr")){ 
      function do_something_with_attr($atr) 
      { 
       do something 
       ... 
       ... 
       return $output; 
      } 
     } 

     if($attr == 1) 
     { 
      return do_something_with_attr($attr); 
     } 
     else 
     { 
      return $attr; 
     } 


    } 
} 
4

はい。 PHP 5.3の時点で、あなたはこのためにanonymous functionsを使用することができます。

class Foo 
{ 
    function bar($attr) 
    { 
     $do_something_with_attr = function($atr) 
     { 
      //do something 
      //... 
      //... 
      $output = $atr * 2; 
      return $output; 
     }; 

     if ($attr == 1) 
     { 
      return $do_something_with_attr($attr); 
     } 
     else 
     { 
      return $attr; 
     } 
    } 
} 
関連する問題