2011-01-16 16 views
8

ist es möglich, Funktion innerhalb einer Klassenmethode zu erstellen und wie rufe ich sie?php: Kann ich Funktion innerhalb einer Klassenmethode erstellen und aufrufen?

dh

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

danken Sie im Voraus

+0

Könnte die gleiche eine normale Verwendung (vielleicht statisch) Klasse Verfahren nicht erreicht werden? –

+0

danke Ihnen allen für Ihre Hilfe – m1k3y3

Antwort

6

Es kann getan werden, aber da Funktionen im globalen Bereich definiert sind, wird dies zu einem Fehler, wenn die Methode zweimal seit dem PHP-Engine genannt wird berücksichtigt die Funktion, die während des zweiten Aufrufs neu definiert wird.

+1

Es kann mit Trivia 'function_exists()' obwohl – zerkms

+0

Ich bekomme Fehler, wie Ignacio schrieb, gelöst werden. Zerkms, könntest du bitte ausführlicher erklären, wie man mit function_exists() löst? - Danke. – m1k3y3

+0

Die PHP-Dokumentation ist eine wunderbare Sache http://php.net/manual/en/function.function-exists.php – Scuzzy

1

Verwenden Sie "function_exists", um Fehler zu vermeiden.

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

Ja. Ab PHP 5.3 können Sie anonymous functions für diesen Einsatz:

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