怎么可能 - 在php中成功调用不存在的方法[哪里是???的方法]

时间:2012-10-02 00:24:24

标签: php methods kohana

  

可能重复:
  redirecting to other methods when calling non-existing methods

我有一个代码,我正在检查并获得了很棒的功能。

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($ ticket)也显示,$ ticket不包含方法validate()......

1 个答案:

答案 0 :(得分:0)

Model类父类没有validate()方法。

由于Kohana DOCS我们尝试调用validate方法(elseif ($method === 'validate'))时会调用受保护的_validate方法。