Что означает массив keword перед параметром метода в PHP?

Я наткнулся на объявление функции в PHP с ключевым словом array перед параметром. Теперь, так как вы не объявляете типы в PHP, это выглядит для меня очень странно. Это просто «ошибка», что-то, что кто-то положил туда, что не оценено, или это действительно что-то значит?

public function sendSMTPMail(array $mailContent) { }

У меня такое ощущение, что его там не должно быть и ничего не происходит, но, может быть, я ошибаюсь? Есть ли разница в

public function sendSMTPMail($mailContent) { }

?

1

Решение

Это известно как объявление типа, оно также известно как подсказка типа в PHP5.

Объявления типов позволяют функциям указывать параметры как определенные типы. Если заданное значение имеет неправильный тип, то генерируется ошибка: в PHP 5 это будет исправимая фатальная ошибка, в то время как PHP 7 выдаст TypeError исключение.

Чтобы указать объявление типа, имя типа должно быть добавлено перед именем параметра. Можно сделать объявление, чтобы принимать значения NULL, если для параметра по умолчанию установлено значение NULL.

Допустимые типы

Type                    Description                                                Minimum PHP version
----------------------------------------------------------------------------------------------------------
Class/interface name    The parameter must be an instanceof the given class         PHP 5.0.0
or interface name.
----------------------------------------------------------------------------------------------------------
self                    The parameter must be an instanceof the same class as       PHP 5.0.0
the one the method is defined on.
This can only be used on class and instance methods.
----------------------------------------------------------------------------------------------------------
array                   The parameter must be an array.                             PHP 5.1.0
----------------------------------------------------------------------------------------------------------
callable                The parameter must be a valid callable.                     PHP 5.4.0
----------------------------------------------------------------------------------------------------------
bool                    The parameter must be a boolean value.                      PHP 7.0.0
----------------------------------------------------------------------------------------------------------
float                   The parameter must be a floating point number.              PHP 7.0.0
----------------------------------------------------------------------------------------------------------
int                     The parameter must be an integer.                           PHP 7.0.0
----------------------------------------------------------------------------------------------------------
string                  The parameter must be a string.                             PHP 7.0.0
----------------------------------------------------------------------------------------------------------

Первоначальный источник: Объявление типа аргумента функции PHP

В вашем случае посмотрите на следующий пример:

function test(array $array)
{
foreach($array as $k=>$v)
{

}
}

test(array("string")); //passed - no error
test("string"); //failed - catchable error

Выход:

Исправляемая фатальная ошибка: Аргумент 1, передаваемый в test (), должен иметь массив типов, заданную строку, вызываться в /var/www/html/test/test1.php в строке 12 и определяться в / var / www / html / test / test1.php в строке 3

1

Другие решения

Это для Тип подсказки. Если данные, переданные ему, имеют другой тип, тогда он выдаст ошибку (> = PHP 5).

Объявления типов позволяют функциям указывать параметры как определенные типы. Если заданное значение имеет неправильный тип, то генерируется ошибка: в PHP 5 это будет исправимая фатальная ошибка, в то время как PHP 7 вызовет исключение TypeError.

Тип объявления

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

0

По вопросам рекламы [email protected]