php: puis-je créer et appeler une fonction à l'intérieur d'une méthode de classe?

est-il possible de créer une fonction à l'intérieur d'une méthode de classe et comment dois-je l'appeler ?

i.e.

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

merci d'avance

8
demandé sur m1k3y3 2011-01-17 02:55:00

3 réponses

cela peut être fait, mais puisque les fonctions sont définies dans la portée globale, cela résultera en une erreur si la méthode est appelée deux fois puisque le moteur PHP considérera la fonction à redéfinir lors du second appel.

6
répondu Ignacio Vazquez-Abrams 2011-01-17 00:01:32

Oui. Depuis PHP 5.3, vous pouvez utiliser fonctions anonymes pour ceci:

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;
        }
     }
}
4
répondu Russell Hankins 2016-08-30 16:00:30

Utilisez "function_exists" pour éviter les erreurs.

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


    }
}
1
répondu joan16v 2014-07-10 10:05:25