Trong khi xem xét một số mã PHP tôi đã phát hiện ra một điều lạ. Dưới đây là ví dụ đơn giản minh họa của nó:Thừa kế PHP, các hàm cha sử dụng các biến con
file A.php:
<?php
class A{
public function methodA(){
echo $this->B;
}
}
?>
file B.php:
<?php
class B extends A{
public $B = "It's working!";
}
?>
file test.php:
<?php
require_once("A.php");
require_once("B.php");
$b = new B();
$b->methodA();
?>
Chạy test.php in ra "Nó hoạt động!", nhưng câu hỏi là tại sao nó hoạt động? :) Đây có phải là một tính năng hoặc một lỗi không? Phương thức methodA trong lớp A cũng có thể gọi các phương thức trong lớp B không nên hoạt động trong OOP.
Một cách để kiểm tra sẽ được tạo ra một lớp "C" mà không xác định B, và xem những gì sẽ xảy ra. Trong khi những gì bạn đã làm sẽ được coi là một thiết kế điên rồ nếu nó không được thực hiện để thử nghiệm, PHP có thể đủ thông minh để làm cho nó hoạt động trong tình huống đó. –
OOP không nói gì về việc liệu các phương thức lớp con có nên hoạt động từ lớp cơ sở hay không. Nó nói rằng các phương thức siêu lớp nên có sẵn cho các lớp con (trừ khi bị ghi đè), nếu có bất cứ điều gì ... nhưng khá im lặng về cách khác xung quanh. Trong thực tế, một số ngôn ngữ OOP thuần khiết nhất trong sự tồn tại thậm chí không quan tâm. – cHao
5+ upvotes? Làm thế nào mà? –