Подсказка типов данных в PHP
Этот урок начнется с объяснения темы подсказки типов для массивов и объектов, которая поддерживается как в PHP5, так и в PHP7. Мы также рассмотрим тему подсказки типов для основных типов данных (целые числа, числа с плавающей запятой, строки и логические значения), которые поддерживаются только в PHP7.
С помощью подсказки типа мы можем указать ожидаемый тип данных (массивы, объекты, интерфейс и т.д.) для аргумента в объявлении функции. Этот метод может быть весьма полезным, поскольку он способствует лучшей организации кода и более конкретным сообщениям об ошибках.
Как сделать подсказку типа массива?
Когда мы хотим заставить функцию получать только аргументы типов массива, мы можем поместить ключевое слово array перед именем аргумента со следующим синтаксисом:
Синтаксис
<?php
function functionName (array $argumentName)
{
//код
}
?>
В следующем примере функция calcNumKm()
вычисляет количество километров, которое автомобиль может проехать с полным баком бензина, в зависимости от объема бака, а также количество километров на литр. Эта функция принимает в качестве аргумента только массив, как мы видим из того факта, что имени аргумента предшествует ключевое слово array:
Пример
<?php
// Функция может получить только массив в качестве аргумента
function calcNumKm(array $models)
{
foreach($models as $item)
{
echo $carModel = $item[0];
echo " : ";
echo $numberOfKm = $item[1] * $item[2];
echo "<br>";
}
}
?>
Давайте попробуем передать функции аргумент, который не является массивом, чтобы посмотреть, что может произойти в таком случае:
Пример
<?php
calcNumKm("Toyota");
?>
Результат выполнения кода:
Эта ошибка, а точное описание того, что пошло не так с нашим кодом. Из него мы можем понять, что функция ожидала переменную типа массива, а не строку.
Давайте перепишем код и передадим функции массив с ожидаемыми элементами, включая названия моделей, объемы резервуаров и километры на литр:
Пример
Попробуй сам »<?php
// Функция может получить только массив в качестве аргумента
function calcNumKm(array $models)
{
foreach($models as $item)
{
echo $carModel = $item[0];
echo " : ";
echo $numberOfKm = $item[1] * $item[2];
echo "<br>";
}
}
$models = array(
array('Toyota', 12, 44),
array('BMW', 13, 41)
);
calcNumKm($models);
?>
Результат выполнения кода:
BMW : 533
Теперь код работает, потому что мы передали функции массив, который она ожидала получить.
Как сделать подсказку по типу объекта?
Подсказка типа также может использоваться, чтобы заставить функцию получить аргумент типа Object
. Для этого мы помещаем имя класса перед именем аргумента в функции.
В следующем примере конструктор класса может получать только объекты, созданные из класса Driver
. Мы обеспечиваем это, помещая слово Driver
перед именем аргумента в конструкторе:
Пример
<?php
class Car {
protected $driver;
// Конструктор может получать только объекты из класса Driver в качестве аргументов
public function __construct(Driver $driver)
{
$this -> driver = $driver;
}
}
class Driver {}
$driver1 = new Driver();
$car1 = new Car($driver1);
?>
Поддерживает ли PHP указание на основные типы данных?
В то время как PHP5 не позволяет указывать типы для основных типов данных (целые числа, числа с плавающей запятой, строки и логические значения), PHP7 поддерживает подсказки скалярных типов.
PHP5 не поддерживает указание типов для основных типов данных, таких как целые числа, логические значения или строки. Итак, когда нам нужно проверить, принадлежит ли аргумент базовому типу данных, мы можем использовать одну из функций семейства PHP is_.
Например:
- is_bool - узнать, является ли переменная логической (true или false).
- is_int - узнать, является ли переменная целым числом.
- is_float - узнать, является ли переменная float (3.14, 1.2e3 или 3E-10).
- is_null - узнать, является ли переменная нулевой.
- is_string - узнать, является ли переменная строкой.
С другой стороны, PHP7 поддерживает подсказки скалярного типа. Поддерживаемые типы: целые числа, числа с плавающей запятой, строки и логические значения.
Следующий пример кода может работать только в PHP7:
Пример
<?php
class car {
protected $model;
protected $hasSunRoof;
protected $numberOfDoors;
protected $price;
// подсказка строкового типа
public function setModel(string $model)
{
$this->model = $model;
}
// подсказка логического типа
public function setHasSunRoof(bool $value)
{
$this->hasSunRoof = $value;
}
// подсказка целочисленного типа
public function setNumberOfDoors(int $value)
{
$this->numberOfDoors = $value;
}
// подсказка типа float
public function setPrice(float $value)
{
$this->price = $value;
}
}
?>
Заключение
В этом уроке вы изучили тему подсказки типов для типов данных массива и объекта, а также для скалярных типов данных (целые числа, числа с плавающей запятой, строки и логические значения). Кликните здесь, чтобы попрактиковаться в предмете. Об использование подсказок типов для интерфейсов будет объяснено в следующем уроке.