PHP Учебник

PHP Старт Введение в PHP Установка PHP Синтаксис PHP Комментарии в PHP Переменные PHP PHP Echo / Print Типы данных PHP Строки PHP Числа PHP Математика в PHP Константы PHP Операторы PHP PHP If...Else...Elseif PHP Switch Циклы в PHP Функции PHP Массивы PHP PHP Суперглобальные PHP RegEx

PHP Формы

Обработка форм PHP Валидация форм PHP Обязательные поля Валидация URL/E-mail Полная форма PHP

PHP Продвинутый

PHP Дата и время PHP Include/Require PHP Работа с файлами Открытие/Чтение файлов Создание/Запись файлов PHP Загрузка файлов Файлы cookie PHP Сессии PHP Фильтры PHP Расширенные фильтры PHP Функция Callback PHP JSON PHP Исключения

PHP OOP

Что такое ООП в PHP Классы/Объекты PHP Цепочки методов PHP Конструктор PHP Деструктор PHP Модификаторы доступа Наследование в PHP Константы класса PHP Подсказка типов PHP Подсказка интерфейсов Абстрактные классы PHP PHP Интерфейсы PHP Полиформизм PHP Трейты Статические методы PHP Статические свойства PHP Пространства имен PHP Итерируемые объекты

База данных MySQL

База данных MySQL Подключение к MySQL Создание БД MySQL Создание таблицы MySQL Вставка данных MySQL Получить ID MySQL Подготовленные операторы PHP MySQL Получение данных MySQL Предложение WHERE Предложение ORDER BY Обновление данных MySQL Удаление данных БД MySQL Limit Data

PHP XML

Парсеры PHP XML Парсер PHP SimpleXML Получить PHP SimpleXML PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX Введение AJAX PHP AJAX База Данных AJAX XML AJAX Живой поиск AJAX Опрос

PHP Примеры

PHP Примеры Практика ООП PHP PHP квиз-тест Упражнения Базовый PHP Упражнения Алгоритмы Упражнения Массивы Упражнения Цикл for Упражнения Функции Регулярные выражения Упражнения Дата PHP Упражнения Строки PHP Математика PHP Упражнения Формы PHP Упражнения Классы PHP Упражнения JSON PHP PHP Задачник


Подсказка типов данных в 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");
?>

Результат выполнения кода:

Catchable fatal ERROR: Argument 1 passed to calcNumKm() must be of the type array, string given

Эта ошибка, а точное описание того, что пошло не так с нашим кодом. Из него мы можем понять, что функция ожидала переменную типа массива, а не строку.

Давайте перепишем код и передадим функции массив с ожидаемыми элементами, включая названия моделей, объемы резервуаров и километры на литр:

<?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);
?>

Результат выполнения кода:

Toyota : 528
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);
?>

В то время как 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;
  }        
}
?>

В этом уроке вы изучили тему подсказки типов для типов данных массива и объекта, а также для скалярных типов данных (целые числа, числа с плавающей запятой, строки и логические значения). Кликните здесь, чтобы попрактиковаться в предмете. Об использование подсказок типов для интерфейсов будет объяснено в следующем уроке.