2

可能重复:
调用不存在的方法时重定向到其他方法

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

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()...

4

1 回答 1

0

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

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

于 2012-10-02T06:38:50.170 回答