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

спасибо заранее

3 ответов


Это можно сделать, но поскольку функции определены в глобальной области, это приведет к ошибке, если метод вызывается дважды, так как движок PHP будет считать функцию переопределенной во время второго вызова.


да. Начиная с PHP 5.3, вы можете использовать анонимные функции для этого:

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

использовать "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;
       }


    }
}