2011-01-16 18 views
8

Czy można utworzyć funkcję wewnątrz metody klasy i jak ją nazwać?php: czy mogę utworzyć i wywołać funkcję wewnątrz metody klasy?

tj

 
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; 
     } 
    } 
} 

góry dziękuję

+0

Czy nie to samo można osiągnąć stosując normalne (chyba statyczny) metody klasy? –

+0

dziękuję wszystkim za pomoc – m1k3y3

Odpowiedz

6

To można zrobić, ale ponieważ funkcje są zdefiniowane w zakresie globalnym spowoduje to błąd, jeśli metoda jest wywoływana dwa razy od silnika PHP rozważy możliwość ponownego zdefiniowania funkcji podczas drugiego połączenia.

+1

Można go rozwiązać za pomocą ciekawostek 'function_exists()' choć – zerkms

+0

Otrzymuję błąd, jak napisał Ignacio. Zerkms, czy mógłbyś wyjaśnić bardziej szczegółowo, jak rozwiązać za pomocą function_exists()? - Dziękuję Ci. – m1k3y3

+0

Dokumentacja php jest cudowną rzeczą http://php.net/manual/en/function.function-exists.php – Scuzzy

1

Użyj "function_exists", aby uniknąć błędów.

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

Tak. Od PHP 5.3, można użyć anonymous functions na to:

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; 
     } 
    } 
} 
Powiązane problemy