PHP 7 ใช้การบอกใบ้สองประเภทในการประกาศประเภทสเกลาร์และการประกาศประเภทการส่งคืน -
- คำใบ้ประเภทที่อ่อนแอ
- คำใบ้แบบเคร่งครัด
คำใบ้ประเภทที่อ่อนแอ
ตามค่าเริ่มต้น PHP 7 ทำงานในโหมดการตรวจสอบประเภทที่อ่อนแอ การตรวจสอบประเภทที่อ่อนแอจะไม่ทำให้เกิดข้อผิดพลาดหรือข้อผิดพลาดร้ายแรง เมื่อการประกาศประเภทไม่ตรงกันเกิดขึ้น ก็จะเรียกใช้โค้ดโดยไม่ทำให้เกิดข้อผิดพลาด
โดยการใช้ strict_typesdeclare() เราสามารถควบคุมการตรวจสอบประเภทที่อ่อนแอได้
declare(strict_types=0);//การตรวจสอบประเภทที่อ่อนแอ; เราควรตั้งค่าที่เข้มงวด =0
คำใบ้ประเภทที่อ่อนแอ ตัวอย่างที่ 1
<ก่อน>ผลลัพธ์
โค้ดจะสร้างผลลัพธ์ต่อไปนี้ -
30
คำอธิบาย
ในตัวอย่างข้างต้น เราไม่ได้ใช้ค่าที่เข้มงวดสำหรับพารามิเตอร์ เราใช้ตัวแปรจำนวนเต็มสองตัวคือ x และ y สำหรับ x=10 และ y กำลังใช้เลขทศนิยม 20.20 แต่ y จะไม่สร้างข้อผิดพลาดใดๆ มันจะให้ค่าจำนวนเต็มเอาท์พุต 30
ตัวอย่างที่ 2
ผลลัพธ์
ผลลัพธ์สำหรับโปรแกรมข้างต้นจะเป็น −
int(9)
คำใบ้แบบเข้มงวด
การบอกใบ้ประเภทที่เข้มงวดจะทำให้เกิดข้อผิดพลาดร้ายแรงเมื่อการประกาศประเภทไม่ตรงกันเกิดขึ้น เราสามารถพูดได้ว่าการบอกใบ้แบบเข้มงวดยอมรับตัวแปรประเภทที่แน่นอนของการประกาศประเภท มิฉะนั้นจะทำให้ TypeError ไม่ตรงกัน
ในการบอกใบ้แบบเข้มงวด คำสั่งแรกในไฟล์ต้องได้รับการประกาศ (strict_types=1) ไม่เช่นนั้นจะทำให้เกิดข้อผิดพลาดของคอมไพเลอร์ ไม่มีผลกับไฟล์อื่นๆ ที่รวมอยู่ซึ่งไม่ได้ระบุไว้ในไฟล์ ซึ่งหมายความว่ามีผลกับไฟล์เฉพาะที่ใช้เท่านั้น
คำสั่งบอกใบ้แบบเข้มงวดเป็นเวลาคอมไพล์อย่างสมบูรณ์และไม่สามารถควบคุมได้ในขณะใช้งานจริง
คำใบ้แบบเข้มงวด ตัวอย่างที่ 1
ผลลัพธ์
โปรแกรมบอกใบ้แบบเข้มงวดด้านบนจะเป็น −
float(5.2) ข้อผิดพลาดร้ายแรง:Uncaught TypeError:อาร์กิวเมนต์ 2 ส่งผ่านไปยัง returnadd() ต้องเป็นประเภท float สตริงที่กำหนด เรียกใน C:\xampp\htdocs\gud.php ในบรรทัดที่ 7 และกำหนดไว้ใน C:\xampp\htdocs\gud.php:3 Stack trace:#0 C:\xampp\htdocs\gud.php(7):returnadd(3, '2 days') #1 {main} ถูกส่งออกไปใน C:\xampp\ htdocs\gud.php ในบรรทัดที่ 3
คำใบ้แบบเข้มงวด ตัวอย่างที่ 2
มันจะสร้างผลลัพธ์ “ข้อผิดพลาดร้ายแรง”
ในตัวอย่างการประกาศประเภทที่เข้มงวดข้างต้น หากเราประกาศค่าเข้มงวด_type คือ 1 โค้ดจะให้ผลลัพธ์ "ข้อผิดพลาดร้ายแรง:Uncaught TypeError:อาร์กิวเมนต์ 1 ที่ส่งไปยัง add() ต้องเป็นประเภท int , สตริงจะได้รับ”.