Toán tử instanceof và Kế thừa trong OOP PHP
Hãy cùng phân tích đặc điểm của kế thừa khi sử dụng
toán tử instanceof. Giả sử chúng ta có một lớp cha
và một lớp con:
<?php
// Lớp cha:
class ParentClass
{
}
// Lớp con:
class ChildClass extends ParentClass
{
}
?>
Hãy tạo một đối tượng của lớp con:
<?php
$obj = new ChildClass;
?>
Bây giờ hãy kiểm tra bằng instanceof,
xem đối tượng của chúng ta có thuộc về lớp ParentClass
và lớp ChildClass không:
<?php
var_dump($obj instanceof ChildClass); // sẽ hiển thị true
var_dump($obj instanceof ParentClass); // cũng sẽ hiển thị true
?>
Như bạn thấy từ ví dụ - toán tử instanceof
không phân biệt khi kiểm tra giữa các lớp cha
và lớp con.
Đừng nhầm lẫn - nếu đối tượng thực sự là
của lớp cha thì, tất nhiên, việc kiểm tra
thuộc về lớp con sẽ trả về
false:
<?php
$obj = new ParentClass; // đối tượng của lớp cha
var_dump($obj instanceof ParentClass); // sẽ hiển thị true
var_dump($obj instanceof ChildClass); // sẽ hiển thị false
?>
Tạo lớp User với các thuộc tính công khai
name và surname.
Tạo lớp Employee, lớp này sẽ
kế thừa từ lớp User và thêm
thuộc tính salary.
Tạo lớp City với các thuộc tính công khai
name và population.
Tạo 3 đối tượng của lớp User,
3 đối tượng của lớp Employee,
3 đối tượng của lớp City, và
ghi chúng vào mảng
$arr theo thứ tự tùy ý.
Duyệt mảng $arr bằng vòng lặp và hiển thị
ra màn hình cột thuộc tính name của những
đối tượng thuộc về lớp User
hoặc lớp con của lớp này.
Duyệt mảng $arr bằng vòng lặp và hiển thị
ra màn hình cột thuộc tính name của những
đối tượng không thuộc về lớp User
hoặc lớp con của lớp này.
Duyệt mảng $arr bằng vòng lặp và hiển thị
ra màn hình cột thuộc tính name của những
đối tượng thuộc về chính xác lớp
User, tức là không phải lớp City
và không phải lớp Employee.