PHP - $ request-> getPost ('first_name') - PullRequest
       0

PHP - $ request-> getPost ('first_name')

4 голосов
/ 31 марта 2012
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() напрямую?

Ответы [ 2 ]

7 голосов
/ 31 марта 2012

Подсказка типа - это просто подсказка. Все это говорит о том, что $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.

0 голосов
/ 31 марта 2012

getPost() не определено в Zend_Controller_Request_Abstract, а Zend_Controller_Request_Abstract не наследует эту функцию как расширение какого-либо другого класса , так что, вкратце, код, который вы разместили, должен вызвать некоторое исключение / ошибку.

РЕДАКТИРОВАТЬ: Похоже, что в PHP «Если класс или интерфейс указан как подсказка типа, то все его потомки или реализации также разрешены».Это означает, что вы можете передать Zend_Controller_Request_HTTP в process(), и это будет работать.

Источник: http://php.net/manual/en/language.oop5.typehinting.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...