PHP-функция с разделенными пробелами аргументами - PullRequest
0 голосов
/ 17 января 2012

Что это означает в PHP, когда список аргументов функции содержит класс и имя переменной, разделенные пробелом?

Например, в примере PHP-библиотеки API Batchbook , естьявляется следующим объявлением функции:

public function postPerson(Batchblue_Service_BatchBook_Person $person)

, где Batchblue_Service_Batchbook_Person является классом, а $ person является экземпляром этого класса.

Ответы [ 2 ]

5 голосов
/ 17 января 2012

То есть тип подсказки . Это означает, что вы говорите, что этот аргумент должен быть экземпляром этого класса или одного из его потомков.

PHP 5 вводит тип подсказки. Функции теперь могут заставить параметры быть объектами (указав имя класса в прототипе функции) или массивами (начиная с PHP 5.1). Однако если в качестве значения параметра по умолчанию используется NULL, он будет разрешен в качестве аргумента для любого последующего вызова.

0 голосов
/ 17 января 2012

A комментарий в Страница PHP с аргументами функции дает некоторую подсказку.

Цитата:

Вы можете использовать (очень) ограниченные подписи для ваших функций, с указанием разрешенных типов аргументов.

Например:

public function Right( My_Class $a, array $b )

указывает, что первый аргумент должен быть объектом My_Class, а второй - массивом.My_Class означает, что вы также можете передать объект класса, который либо расширяет My_Class, либо реализует (если My_Class является абстрактным классом) My_Class.Если вам нужен именно My_Class, вам нужно либо сделать его окончательным, либо добавить некоторый код, чтобы проверить, что на самом деле $ a.

Также обратите внимание, что (к сожалению) «массив» - это единственный встроенный тип, который вы можете использоватьв подписи.Любые другие типы, например:

public function Wrong( string $a, boolean $b )

вызовут ошибку, потому что PHP будет жаловаться, что $ a не является объектом строки класса (а $ b -не объект класса boolean).

Так что если вам нужно знать, является ли $ a строкой или $ b bool, вам нужно написать некоторый код в теле функции и, например, выдать исключение, если вы обнаружите несоответствие типов(или вы можете попытаться разыграть, если это возможно).

...