2012-10-02 2 views
2

가능한 중복 [어디 ???에서 방법] : 나는 코드가
redirecting to other methods when calling non-existing methods이 가능 방법 - 성공적으로 PHP에서 호출 존재하지 않는 방법은

, 어떤 나는 검사하고 있고 환상적인 특징을 가지고있다.

PHP 5.4.0/Kohana 3.0.3

문자열이 문제가 정확히 :

$ticket = ORM::factory('ticket'); 
$this->template->errors = $ticket->validate()->errors('validate_ticket'); 

문제가 해당 클래스의 Model_Ticket이고 방법의 validate()를 포함하지 않는 부모의 모든하지만, 이 메소드는 유효한 값을 리턴합니다. 어떻게 가능합니까? 우리는 결과로 무엇을 가지고 여기

echo 'get_class($ticket)='; echo get_class($ticket); echo "\n"; 

echo "var_dump(method_exists(\$ticket,'validate'))="; var_dump(method_exists($ticket,'validate')); echo '\n'; 

echo "var_dump(method_exists('Model_Ticket','validate'))=";var_dump(method_exists('Model_Ticket','validate'));echo '\n' 

echo 'get_class($ticket->validate())=';echo get_class($ticket->validate()); 

:

다음 코드를 보여줍니다

get_class($ticket)=Model_Ticket 
var_dump(method_exists($ticket,'validate'))=bool(false) 
var_dump(method_exists('Model_Ticket','validate'))=bool(false) 
get_class($ticket->validate())=Validate 

get_class_methods ($ 티켓)도 보여주고, 그 $ 티켓이 방법의 유효성 검사를 포함하지 않는() ..

+0

['__call()'] (http://www.php.net/manual/ko/language.oop5.overloading.php#object.call)가 구현되어 있는지 확인 했습니까? – mario

+0

내가 확인했는데 ... – user1713204

+0

죄송합니다, 당신이 옳았습니다. 부모 중 한 명이 그렇게합니다. 큰 감사, 마리오! – user1713204

답변

0

Model 클래스 부모 클래스에는 validate() 메서드가 없습니다.

Kohana DOCS으로 전화를 걸 때 validate 메서드 (elseif ($method === 'validate'))를 호출하면 _validate 메서드가 호출됩니다.