ตัวดำเนินการ instanceof และการสืบทอดใน OOP ใน PHP
เรามาเรียนรู้ลักษณะเฉพาะของการสืบทอดเมื่อใช้
ตัวดำเนินการ instanceof กัน สมมติว่าเรามีคลาสหลัก
และคลาสย่อย:
<?php
// คลาสหลัก:
class ParentClass
{
}
// คลาสย่อย:
class ChildClass extends ParentClass
{
}
?>
มาสร้างออบเจ็กต์ของคลาสย่อย:
<?php
$obj = new ChildClass;
?>
ทีนี้ มาตรวจสอบด้วย instanceof
ว่าออบเจ็กต์ของเราเป็นของคลาส ParentClass
และคลาส ChildClass หรือไม่:
<?php
var_dump($obj instanceof ChildClass); // แสดงผล true
var_dump($obj instanceof ParentClass); // ก็จะแสดงผล true
?>
ดังที่คุณเห็นจากตัวอย่าง - ตัวดำเนินการ instanceof
ไม่สร้างความแตกต่างในการตรวจสอบระหว่างคลาสหลัก
และคลาสย่อย
อย่าสับสน - หากออบเจ็กต์เป็น
ของคลาสหลักจริง ๆ แน่นอนว่าการตรวจสอบ
ความเป็นของคลาสย่อยจะคืนค่า
false:
<?php
$obj = new ParentClass; // ออบเจ็กต์ของคลาสหลัก
var_dump($obj instanceof ParentClass); // แสดงผล true
var_dump($obj instanceof ChildClass); // แสดงผล false
?>
สร้างคลาส User พร้อมคุณสมบัติสาธารณะ
name และ surname
สร้างคลาส Employee ซึ่งจะ
สืบทอดจากคลาส User และเพิ่ม
คุณสมบัติ salary
สร้างคลาส City พร้อมคุณสมบัติสาธารณะ
name และ population
สร้างออบเจ็กต์ของคลาส User จำนวน 3 ชิ้น,
ออบเจ็กต์ของคลาส Employee จำนวน 3 ชิ้น,
ออบเจ็กต์ของคลาส City จำนวน 3 ชิ้น และ
ในลำดับใดก็ได้ ให้บันทึกลงในอาร์เรย์
$arr
วนลูปผ่านอาร์เรย์ $arr และแสดง
คอลัมน์ของคุณสมบัติ name ของ
ออบเจ็กต์เหล่านั้นที่อยู่ในคลาส User
หรือคลาสที่สืบทอดจากคลาสนี้ บนหน้าจอ
วนลูปผ่านอาร์เรย์ $arr และแสดง
คอลัมน์ของคุณสมบัติ name ของ
ออบเจ็กต์เหล่านั้นที่ไม่อยู่ในคลาส User
หรือคลาสที่สืบทอดจากคลาสนี้ บนหน้าจอ
วนลูปผ่านอาร์เรย์ $arr และแสดง
คอลัมน์ของคุณสมบัติ name ของ
ออบเจ็กต์เหล่านั้นที่อยู่ในคลาส
User จริง ๆ กล่าวคือ ไม่ใช่คลาส City
และไม่ใช่คลาส Employee บนหน้าจอ