ตัวดำเนินการ instanceof และการสืบทอดใน OOP ใน PHP

เรามาเรียนรู้ลักษณะเฉพาะของการสืบทอดเมื่อใช้ ตัวดำเนินการ instanceof กัน สมมติว่าเรามีคลาสหลัก และคลาสย่อย:

index.php<?php
  // คลาสหลัก:
  class ParentClass
  {
    
  }
  
  // คลาสย่อย:
  class ChildClass extends ParentClass
  {
    
  }
?>

มาสร้างออบเจ็กต์ของคลาสย่อย:

index.php<?php
  $obj = new ChildClass;
?>

ทีนี้ มาตรวจสอบด้วย instanceof ว่าออบเจ็กต์ของเราเป็นของคลาส ParentClass และคลาส ChildClass หรือไม่:

index.php<?php
  var_dump($obj instanceof ChildClass);  // แสดงผล true
  var_dump($obj instanceof ParentClass); // ก็จะแสดงผล true
?>

ดังที่คุณเห็นจากตัวอย่าง - ตัวดำเนินการ instanceof ไม่สร้างความแตกต่างในการตรวจสอบระหว่างคลาสหลัก และคลาสย่อย

อย่าสับสน - หากออบเจ็กต์เป็น ของคลาสหลักจริง ๆ แน่นอนว่าการตรวจสอบ ความเป็นของคลาสย่อยจะคืนค่า false:

php<?php
  $obj = new ParentClass; // ออบเจ็กต์ของคลาสหลัก
  
  var_dump($obj instanceof ParentClass); // แสดงผล true
  var_dump($obj instanceof ChildClass);  // แสดงผล false
?>
Задание 1

สร้างคลาส User พร้อมคุณสมบัติสาธารณะ name และ surname

Задание 2

สร้างคลาส Employee ซึ่งจะ สืบทอดจากคลาส User และเพิ่ม คุณสมบัติ salary

Задание 3

สร้างคลาส City พร้อมคุณสมบัติสาธารณะ name และ population

Задание 4

สร้างออบเจ็กต์ของคลาส User จำนวน 3 ชิ้น, ออบเจ็กต์ของคลาส Employee จำนวน 3 ชิ้น, ออบเจ็กต์ของคลาส City จำนวน 3 ชิ้น และ ในลำดับใดก็ได้ ให้บันทึกลงในอาร์เรย์ $arr

Задание 5

วนลูปผ่านอาร์เรย์ $arr และแสดง คอลัมน์ของคุณสมบัติ name ของ ออบเจ็กต์เหล่านั้นที่อยู่ในคลาส User หรือคลาสที่สืบทอดจากคลาสนี้ บนหน้าจอ

Задание 6

วนลูปผ่านอาร์เรย์ $arr และแสดง คอลัมน์ของคุณสมบัติ name ของ ออบเจ็กต์เหล่านั้นที่ไม่อยู่ในคลาส User หรือคลาสที่สืบทอดจากคลาสนี้ บนหน้าจอ

Задание 7

วนลูปผ่านอาร์เรย์ $arr และแสดง คอลัมน์ของคุณสมบัติ name ของ ออบเจ็กต์เหล่านั้นที่อยู่ในคลาส User จริง ๆ กล่าวคือ ไม่ใช่คลาส City และไม่ใช่คลาส Employee บนหน้าจอ