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
的函数,那么为什么$request
直接调用getPost()
呢?
类型提示就是这样,一个提示。它所声明的只是$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
方法中。
getPost()
没有在Zend_Controller_Request_Abstract
中定义,Zend_Controller_Request_Abstract
也不会通过扩展任何其他类来继承此函数,因此简而言之,您发布的代码应该抛出一些异常/错误。
编辑:似乎在PHP中,"如果类或接口被指定为类型提示,那么它的所有子项或实现也被允许。这意味着您可以将Zend_Controller_Request_HTTP
传递给process()
并且它将起作用。
来源: http://php.net/manual/en/language.oop5.typehinting.php