public function process(Zend_Controller_Request_Abstract $request)
{
$this->first_name = $this->sanitize($request->getPost('first_name'));
....
}
我的问题是$request
是类zend_controller_request_abstract
的一个实例,但是getpost是在zend_controller_request_http
类中定义的函数,它扩展了zend_controller_request_abstract
,为什么{{1}直接调用$request
?
答案 0 :(得分:7)
类型提示只是一个提示。它表示$request
必须从Zend_Controller_Request_Abstract
延伸。它不意味着$request
是Zend_Controller_Request_Abstract
的实例。
在这种特殊情况下,$request
是Zend_Controller_Request_Http
的一个实例,它实现了getPost()
,因此您可以毫无问题地调用$request->getPost()
。 $request
也是从Zend_Controller_Request_Abstract
扩展的类的实例,因此PHP允许它首先传递到process
方法。
答案 1 :(得分:0)
getPost()
中未定义 Zend_Controller_Request_Abstract
,Zend_Controller_Request_Abstract
未通过任何其他类的扩展继承此函数,因此简而言之,您发布的代码应该抛出一些异常/错误。击>
编辑:在PHP中,似乎“如果将类或接口指定为类型提示,那么也允许其所有子项或实现。”这意味着您可以将Zend_Controller_Request_HTTP
传递给process()
,这样就可以了。