З блогу Treehouse :
З PHP 7 тепер ми додали скалярні типи. Зокрема: int, float, string та bool.
Додаючи підказки типу скалярного типу та уможливлюючи суворі вимоги, можна сподіватися, що можна написати більш правильні та самодокументовані програми PHP. Це також дає більше контролю над кодом і може полегшити його читання.
За замовчуванням скалярні декларації типу не суворі, це означає, що вони намагатимуться змінити початковий тип, щоб він відповідав типу, визначеному декларацією типу. Іншими словами, якщо ви передасте рядок, який починається з числа, у функцію, яка вимагає float, вона схопить число з самого початку і видалить усе інше. Передача поплавця у функцію, яка вимагає int, стане int (1).
За замовчуванням PHP передасть значення неправильного типу в очікуваний скалярний тип, якщо це можливо. Наприклад, функція, якій надано ціле число для параметра, який очікує, що рядок отримає змінну рядка типу.
Строгі типи вимкнено ( eval ):
<?php
function AddIntAndFloat(int $a, float $b) : int
{
return $a + $b;
}
echo AddIntAndFloat(1.4, '2');
/*
* without strict typing, PHP will change float(1.4) to int(1)
* and string('2') to float(2.0) and returns int(3)
*/
Можна включити суворий режим на основі файлів. У суворому режимі буде прийнята лише змінна точного типу декларації типу, або викинеться TypeError. Єдиним винятком із цього правила є те, що функція, яка очікує поплавця, може бути задана цілим числом. Декларація строгих типів не впливатиме на виклики функцій з внутрішніх функцій.
Щоб увімкнути суворий режим, оператор заявлення використовується з декларацією строгого типу:
Включені строгі типи ( eval ):
<?php declare(strict_types=1);
function AddIntAndFloat(int $a, float $b): int
{
return (string) $a + $b;
}
echo AddIntAndFloat(1.4,'2');
// Fatal error: Uncaught TypeError: Argument 1 passed to AddIntAndFloat() must be of the type int, float given
echo AddIntAndFloat(1,'2');
// Fatal error: Uncaught TypeError: Argument 2 passed to AddIntAndFloat() must be of the type float, string given
// Integers can be passed as float-points :
echo AddIntAndFloat(1,1);
// Fatal error: Uncaught TypeError: Return value of AddIntAndFloat() must be of the type integer, string returned
Робочий приклад:
<?php
declare(strict_types=1);
function AddFloats(float $a, float $b) : float
{
return $a+$b;
}
$float = AddFloats(1.5,2.0); // Returns 3.5
function AddFloatsReturnInt(float $a, float $b) : int
{
return (int) $a+$b;
}
$int = AddFloatsReturnInt($float,1.5); // Returns 5
function Say(string $message): void // As in PHP 7.2
{
echo $message;
}
Say('Hello, World!'); // Prints "Hello, World!"
function ArrayToStdClass(array $array): stdClass
{
return (object) $array;
}
$object = ArrayToStdClass(['name' => 'azjezz','age' => 100]); // returns an stdClass
function StdClassToArray(stdClass $object): array
{
return (array) $object;
}
$array = StdClassToArray($object); // Returns array
function ArrayToObject(array $array): object // As of PHP 7.2
{
return new ArrayObject($array);
}
function ObjectToArray(ArrayObject $object): array
{
return $object->getArrayCopy();
}
var_dump( ObjectToArray( ArrayToObject( [1 => 'a' ] ) ) ); // array(1 => 'a');