php: я могу создать и вызвать функцию внутри метода класса? - PullRequest
10 голосов
/ 17 января 2011

возможно ли создать функцию внутри метода класса и как я могу ее вызвать?

т.е.

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 ]

8 голосов
/ 30 августа 2016

Да.Начиная с 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;
        }
     }
}
8 голосов
/ 17 января 2011

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

1 голос
/ 10 июля 2014

Используйте «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;
       }


    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...