PHP - это язык с динамической типизацией. Когда вы определяете функцию, вам не нужно объявлять типы для параметров. Например:
<?php
function add($x, $y)
{
return $x + $y;
}
$result = add(1,2);
echo $result; // 3
Функция add() принимает два аргумента и возвращает их сумму. В этом примере мы передаем два целых числа в функцию add () и получаем результат в виде целого числа.
Если вы передадите два числа с плавающей запятой в функцию add(), вы получите сумму чисел с плавающей запятой, которая является числом с плавающей запятой:
<?php
function add($x, $y)
{
return $x + $y;
}
$result = add(1.0,2.5);
echo $result; // 3.5
Что еще более интересно, вы можете передать целое число и числовую строку в функцию add(), она вернет целое число:
<?php
function add($x, $y)
{
return $x + $y;
}
$result = add(1,'2');
echo $result; // 3
В этом случае функция add() неявно переводит числовую строку «2» в целое число 2 из-за оператора +. Если PHP не удается преобразовать строковый аргумент в целое число, он выдаст ошибку. Например:
<?php
function add($x, $y)
{
return $x + $y;
}
$result = add('Hi','There');
echo $result;
Ошибка:
Fatal error: Uncaught TypeError: Unsupported operand types: string + string in ...
Чтобы задать типы для параметров функции и возвращаемого значения, вы можете ввести подсказки.
Обратите внимание, что PHP также позволяет использовать подсказки типов для свойств класса, с которыми вы познакомитесь в следующем курсе.
Подсказки типа гарантируют, что PHP проверит тип значения во время вызова и выдаст TypeError в случае несоответствия.
Чтобы добавить подсказку типа к параметру, вы помещаете перед ним тип следующим образом:
<?php
function my_function(type $param1, type param2, ...) {
// ...
}
В PHP 5 для подсказок типа можно использовать array, callble и class. В PHP 7+ вы также можете использовать скалярные типы, такие как bool, float, int и string.
В следующем примере показано как объявить функцию, которая принимает два целых числа
<?php
function add(int $x, int $y)
{
return $x + $y;
}
$result = add(1,2);
echo $result; // 3
Однако, если вы передадите два числа с плавающей запятой, вы получите результат в виде целого числа:
<?php
function add(int $x, int $y)
{
return $x + $y;
}
$result = add(1,2.5);
echo $result; // 3
В этом случае PHP неявно преобразует 2,5 в целое число (2) перед вычислением суммы. Результат - целое число.
По умолчанию PHP, если возможно, приводит значение неправильного типа к ожидаемому объявлению скалярного типа. Чтобы применить значение с типом, который соответствует объявлению типа, необходимо объявить строгую типизацию.
Чтобы указать тип возвращаемого значения для функции, вы добавляете тип после заголовка функции следующим образом:
<?php
function my_function(type $param1, type $param2, ...) : type
{
// ..
}
В следующем примере определяется функция add(), которая принимает два целых числа и возвращает целое число:
<?php
function add(int $x, int $y): int
{
return $x + $y;
}
echo add(10, 20);
Начиная с PHP 7.0, если функция не возвращает значение, вы используете тип void. Например:
<?php
function dd($data):void
{
echo '<pre>';
var_dump($data);
echo '</pre>';
die;
}
Начиная с PHP 8.0, если функция возвращает значение нескольких типов, вы можете объявить возвращаемый тип как mixed (смешанный). Например:
<?php
function add($x, $y): mixed
{
return $x * $y;
}
echo add(10, 20); // 200 (int)
echo add(1.5, 2.5); // 3.75 (float)
В этом примере функция add() возвращает целое число или число с плавающей запятой, в зависимости от типов аргументов.