Z bloga Treehouse :
W PHP 7 dodaliśmy teraz typy skalarne. W szczególności: int, float, string i bool.
Istnieje nadzieja, że dodając wskazówki dotyczące typów skalarnych i umożliwiając rygorystyczne wymagania, można napisać bardziej poprawne i samodokumentujące się programy PHP. Zapewnia również większą kontrolę nad kodem i może ułatwić jego odczytywanie.
Domyślnie deklaracje typu skalarnego nie są ścisłe, co oznacza, że będą próbować zmienić typ oryginalny, aby pasował do typu określonego w deklaracji typu. Innymi słowy, jeśli przekażesz ciąg zaczynający się od liczby do funkcji wymagającej liczby zmiennoprzecinkowej, przejmie ona liczbę od początku i usunie wszystko inne. Przekazanie liczby zmiennoprzecinkowej do funkcji, która wymaga wartości int, stanie się int (1).
Domyślnie PHP będzie rzutować wartości niewłaściwego typu na oczekiwany typ skalarny, jeśli to możliwe. Na przykład funkcja, której podano liczbę całkowitą dla parametru, który oczekuje ciągu, otrzyma zmienną typu ciąg.
Ścisłe typy wyłączone ( eval ):
<?php
function AddIntAndFloat(int $a, float $b) : int
{
return $a + $b;
}
echo AddIntAndFloat(1.4, '2');
Możliwe jest włączenie trybu ścisłego dla każdego pliku. W trybie ścisłym akceptowana będzie tylko zmienna o dokładnym typie deklaracji typu lub zostanie wyrzucony błąd TypeError. Jedynym wyjątkiem od tej reguły jest to, że funkcja oczekująca na wartość zmiennoprzecinkową może otrzymać liczbę całkowitą. Na wywołania funkcji z funkcji wewnętrznych nie będzie miała wpływu deklaracja strict_types.
Aby włączyć tryb ścisły, deklaracja deklaracji jest używana z deklaracją strict_types:
Włączono ścisłe typy ( eval ):
<?php declare(strict_types=1);
function AddIntAndFloat(int $a, float $b): int
{
return (string) $a + $b;
}
echo AddIntAndFloat(1.4,'2');
echo AddIntAndFloat(1,'2');
echo AddIntAndFloat(1,1);
Przykład pracy:
<?php
declare(strict_types=1);
function AddFloats(float $a, float $b) : float
{
return $a+$b;
}
$float = AddFloats(1.5,2.0);
function AddFloatsReturnInt(float $a, float $b) : int
{
return (int) $a+$b;
}
$int = AddFloatsReturnInt($float,1.5);
function Say(string $message): void // As in PHP 7.2
{
echo $message;
}
Say('Hello, World!');
function ArrayToStdClass(array $array): stdClass
{
return (object) $array;
}
$object = ArrayToStdClass(['name' => 'azjezz','age' => 100]);
function StdClassToArray(stdClass $object): array
{
return (array) $object;
}
$array = StdClassToArray($object);
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' ] ) ) );