Từ blog của Treehouse :
Với PHP 7, chúng ta đã thêm các kiểu vô hướng. Cụ thể: int, float, chuỗi và bool.
Bằng cách thêm các gợi ý kiểu vô hướng và cho phép các yêu cầu nghiêm ngặt, hy vọng rằng các chương trình PHP tự viết chính xác và chính xác hơn có thể được viết. Nó cũng cho phép bạn kiểm soát nhiều hơn mã của mình và có thể làm cho mã dễ đọc hơn.
Theo mặc định, khai báo kiểu vô hướng là không nghiêm ngặt, có nghĩa là chúng sẽ cố gắng thay đổi loại ban đầu để phù hợp với loại được chỉ định bởi khai báo kiểu. Nói cách khác, nếu bạn chuyển một chuỗi bắt đầu bằng một số vào một hàm yêu cầu float, nó sẽ lấy số đó ngay từ đầu và loại bỏ mọi thứ khác. Truyền một float vào một hàm yêu cầu int sẽ trở thành int (1).
Theo mặc định, PHP sẽ chuyển các giá trị của loại sai thành loại vô hướng dự kiến nếu có thể. Ví dụ, một hàm được cung cấp một số nguyên cho một tham số dự kiến một chuỗi sẽ nhận được một biến kiểu chuỗi.
Các loại nghiêm ngặt bị vô hiệu hóa ( 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)
*/
Có thể kích hoạt chế độ nghiêm ngặt trên cơ sở mỗi tệp. Trong chế độ nghiêm ngặt, chỉ một biến có kiểu khai báo chính xác sẽ được chấp nhận hoặc TypeError sẽ được ném. Ngoại lệ duy nhất cho quy tắc này là một số nguyên có thể được trao cho một hàm mong đợi một số float. Các lệnh gọi hàm từ bên trong các hàm bên trong sẽ không bị ảnh hưởng bởi khai báorict_types.
Để bật chế độ nghiêm ngặt, câu lệnh khai báo được sử dụng với khai báorict_types:
Các loại nghiêm ngặt được kích hoạt ( 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
Ví dụ làm việc:
<?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');