จาก บล็อก Treehouse :
ด้วย PHP 7 ตอนนี้เราได้เพิ่มประเภท Scalar โดยเฉพาะ: 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 จะถูกโยนออกไป ข้อยกเว้นเพียงประการเดียวสำหรับกฎนี้คือจำนวนเต็มอาจถูกกำหนดให้กับฟังก์ชันที่คาดว่าจะมีค่าลอย การเรียกใช้ฟังก์ชันจากภายในฟังก์ชันภายในจะไม่ได้รับผลกระทบจากการประกาศเข้มงวด _types
ในการเปิดใช้งานโหมดเข้มงวดคำสั่งประกาศจะใช้กับการประกาศอย่างเข้มงวด:
เปิดใช้งานประเภทที่เข้มงวดแล้ว ( 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');