2011-01-16 23 views
8

¿es posible crear una función dentro de un método de clase y cómo puedo llamarlo?php: ¿puedo crear y llamar a la función dentro de un método de clase?

es decir

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

gracias de antemano

+0

Podría no es lo mismo llevar a cabo usando un método de clase normal (quizás estática)? –

+0

gracias a todos por su ayuda – m1k3y3

Respuesta

6

Se puede hacer, pero ya que las funciones se definen en el ámbito global esto se traducirá en un error si el método se llama dos veces desde el motor de PHP considerará que la función se redefinirá durante la segunda llamada.

+1

Se puede resolver con Trivia 'function_exists()' aunque – zerkms

+0

Recibo un error como Ignacio escribió. Zerkms, ¿podría explicar con más detalles cómo resolver con function_exists()? - Gracias. – m1k3y3

+0

La documentación de php es algo maravilloso http://php.net/manual/en/function.function-exists.php – Scuzzy

1

Use "function_exists" para evitar errores.

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

Sí. A partir de PHP 5.3, se puede utilizar para este 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; 
     } 
    } 
} 
Cuestiones relacionadas