2014-02-12 1 views
4

나는 반사 수업에서 마법 방법에 대한 수표를 찾으려고 노력하고 있지만 거기에는 없다. 어쩌면 PHP (나는 PHP 5.3 사용하고 있습니다)이 문제를 해결하기 위해 다른 악기가 있습니까? 이런 식으로 뭔가 : PHP 이후마법 방법을 확인하는 방법은 없습니까?

class myClass { 

    public function __call($method, $arguments) 
    { 
     return 'is magic'; 
    } 

    public function notMagic() 
    { 
     return 'not a magic'; 
    } 

} 


$reflection = new ReflectionMethod('myClass', 'magic'); 

if ($reflection->isMagic()) 
{ 
    /* do something if is magic*/ 
} 
+0

당신이 원하는 불분명, 명확히하고 질문을 바꿔주십시오. –

+0

나는 callable 메서드가 마법 메서드인지 확인하고 싶습니다. 죄송합니다 내 영어 –

+1

'method_exists ('myClass', 'isMagic')'false를 반환하면 그것은'__call()'처리기를 통해 먹여야 할 것이라고 말하는 것이 옳은가요? – Scuzzy

답변

2

는 방법은 마법인지 당신은 두 가지 옵션이 있는지 확인하는 방법을 제공하지 않습니다.

워드 프로세서

PHP 매장량 모든 함수 이름은 마법으로 __로 시작하는 것을 말한다. 문서화 된 마법 기능을 원한다면 PHP에서 __으로 함수 이름을 사용하지 않는 것이 좋습니다.

메소드 이름은 __로 시작하는 경우가 있으므로 바로 확인할 수 :

if(strpos($methodName, '__') === 0){ 
    echo "$methodName is magic"; 
} 

이의 단점은 사람이하는 방법 __myNewMethod을 만들 수 그것은 PHP에도 불구하고 마법 간주 될 수 있다는 것입니다 실제로 그것으로 무엇이든 할 수 있습니다.

다른 방법으로 이름을 허용 할 수 있습니다. 다시, 문서에 따라 다음 방법은 마법과 같습니다

__construct(), __destruct(), __call(), __callStatic(), 
__get(), __set(), __isset(), __unset(), __sleep(), 
__wakeup(), __toString(), __invoke(), __set_state() and __clone() 

이 방법의 단점은 PHP의 미래 버전을 추가하고 코드가 잘못하고이 목록에서 제거 할 수 있다는 것이다.

아마도이 정보를 어떻게 사용 하느냐에 달려 있습니다.

PHP Magic Methods

+0

대부분의 사람들을 설명하고있다 판단 할 – Christian