2011-01-16 5 views
8

클래스 메서드 내에서 함수를 만들 수 있나요? 어떻게 호출합니까? 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; 
     } 
    } 
} 

사전에 감사

+0

이 같은 정상적인 (아마도 정적) 클래스 메소드를 사용하여 수행 할 수 없습니다 : PHP 5.3로,이에 대한 anonymous functions을 사용할 수 있습니까? –

+0

당신의 도움에 모두 감사합니다. – m1k3y3

답변

6

그것은 할 수 있지만 기능은 전역 범위에 정의되어 있기 때문에이 방법은 PHP 엔진 때문에 두 번 호출되는 경우이 오류가 발생합니다 두 번째 호출 중에 함수가 재정의 될 것으로 간주합니다.

+1

Ignacio가 쓴 것처럼 나는 오류가 발생합니다.하지만, function_exists()는 퀴즈로 해결할 수 있습니다. – zerkms

+0

Zerkms, function_exists()로 해결하는 방법을 자세히 설명해 주시겠습니까? - 고맙습니다. – m1k3y3

+0

PHP 문서는 훌륭한 것입니다. http://php.net/manual/en/function.function-exists.php – Scuzzy

1

오류를 방지하려면 "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; 
     } 


    } 
} 
4

예.

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; 
     } 
    } 
} 
관련 문제