Lớp con sẽ kế thừa tất cả các thuộc tính và phương thức public và protected từ lớp cha. Ngoài ra, nó có thể có các thuộc tính và phương thức riêng
Một lớp kế thừa được định nghĩa bằng cách sử dụng từ khóa extends
Hãy xem một ví dụ
Thí dụ
class Fruit {
public $name;
public $color;
public function __construct[$name, . ";
$this->name = $name;
$this->color = $color;
}
public function intro[] {
echo "The fruit is {$this->name} and the color is {$this->color}.";
}
}
// Strawberry được kế thừa từ Fruit
class Strawberry mở rộng Fruit {
public function message[] {
echo "Am I a fruit or a berry? ";
}
}
$strawberry = new Strawberry["Strawberry", "red"];
$strawberry->message[];
$strawberry->intro[];
?>
Ví dụ giải thích
Lớp Strawberry được kế thừa từ lớp Fruit
Điều này có nghĩa là lớp Strawberry có thể sử dụng các thuộc tính public $name và $color cũng như các phương thức public __construct[] và intro[] từ lớp Fruit do tính kế thừa
Lớp Strawberry cũng có phương thức riêng. thông điệp[]
PHP - Kế thừa và Công cụ sửa đổi quyền truy cập được bảo vệ
Trong chương trước chúng ta đã biết rằng các thuộc tính hoặc phương thức của protected
có thể được truy cập trong lớp và bởi các lớp dẫn xuất từ lớp đó. Điều đó nghĩa là gì?
Hãy xem một ví dụ
Thí dụ
class Fruit {
public $name;
public $color;
public function __construct[$name, . ";
$this->name = $name;
$this->color = $color;
}
protected function intro[] {
echo "The fruit is {$this->name} and the color is {$this->color}.";
}
}
class Strawberry extends Fruit {
public function message[] {
echo "Tôi là trái cây hay quả mọng?";
}
}
// Thử gọi cả ba phương thức từ lớp bên ngoài
$strawberry = new Strawberry["Strawberry", "red"]; . __construct[] là công khai
$strawberry->message[]; . message[] được công khai
$strawberry->intro[]; . intro[] được bảo vệ
?>
Trong ví dụ trên, chúng ta thấy rằng nếu chúng ta cố gắng gọi một phương thức protected
[intro[]] từ bên ngoài lớp, chúng ta sẽ gặp lỗi. Phương pháp public
sẽ hoạt động tốt
Hãy xem một ví dụ khác
Thí dụ
class Fruit {
public $name;
public $color;
public function __construct[$name, . ";
$this->name = $name;
$this->color = $color;
}
protected function intro[] {
echo "The fruit is {$this->name} and the color is {$this->color}.";
}
}
class Strawberry extends Fruit {
public function message[] {
echo "Tôi là trái cây hay quả mọng?";
// Call protected method from within derived class - OK
$this -> intro[];
}
}
$strawberry = new Strawberry["Dâu", "đỏ"]; . __construct[] là công khai
$strawberry->message[]; . message[] là công khai và nó gọi intro[] [được bảo vệ] từ bên trong lớp dẫn xuất
?>
Trong ví dụ trên, chúng tôi thấy rằng tất cả đều hoạt động tốt. Đó là bởi vì chúng ta gọi phương thức protected
[intro[]] từ bên trong lớp dẫn xuất
PHP - Ghi đè các phương thức kế thừa
Các phương thức kế thừa có thể được ghi đè bằng cách xác định lại các phương thức [sử dụng cùng tên] trong lớp con
Nhìn vào ví dụ dưới đây. Các phương thức __construct[] và intro[] trong lớp con [Strawberry] sẽ ghi đè lên các phương thức __construct[] và intro[] trong lớp cha [Fruit]
Blog này nhằm mục đích mô tả các trụ cột chính của lập trình hướng đối tượng để hiểu sâu hơn về lý do tại sao các nhà phát triển nên sử dụng OOP ngay từ đầu. Viết một số lớp và khởi tạo một số đối tượng là chưa đủ để coi bạn đang thực hành OOP. Để thực hành OOP, các nhà phát triển phải nắm bắt đầy đủ tất cả các trụ cột của OOP
trừu tượngLập trình hướng đối tượng không chỉ là các lớp và đối tượng; . Điều cần thiết là phải hiểu điều này;
Junade Ali, Làm chủ các mẫu thiết kế PHP[1]
Trừu tượng hóa là quá trình kết hợp nhiều chức năng thành một. Hãy nghĩ về một bộ điều nhiệt. Thông thường, bộ điều nhiệt cho phép người dùng thay đổi nhiệt độ mục tiêu, chọn các chế độ khác nhau như sưởi ấm, làm mát hoặc quạt và bật hoặc tắt thiết bị. Khi chúng ta sử dụng máy điều nhiệt, chúng ta không biết về những điều phức tạp tạo ra các chức năng này dưới mui xe. Bằng cách chỉ hiển thị các chức năng trừu tượng cần thiết cho người dùng, chúng tôi giúp người dùng sử dụng các chương trình của chúng tôi dễ dàng hơn
Tính trừu tượng làm cho mã của chúng ta dễ hiểu hơn. Những người khác đọc mã của chúng tôi không cần phải lo lắng về các chi tiết triển khai và có thể hiểu rõ hơn về chương trình của chúng tôi thông qua Trừu tượng hóa
đóng góiĐóng gói là ý tưởng ẩn và hạn chế quyền truy cập vào các chi tiết triển khai của các đối tượng của chúng tôi. Đóng gói bảo vệ dữ liệu và chức năng cần thiết khỏi bị truy cập không đúng cách bên ngoài các đối tượng của chúng tôi. Sự bảo vệ thông qua đóng gói này làm cho mã của chúng tôi mạnh mẽ hơn và có thể dự đoán được. Nếu không đóng gói, chúng ta có thể vô tình cho phép các đối tượng khác tương tác với những thứ mà chúng ta không muốn chúng tương tác. Hơn nữa, đóng gói tăng khả năng bảo trì bằng cách cho phép chúng tôi biết chính xác nơi chúng tôi có thể thay đổi chi tiết triển khai mà không phá vỡ phần còn lại của chương trình
Di sảnKế thừa là một kỹ thuật liên quan đến chức năng “kế thừa” của lớp con từ lớp cha hoặc lớp cha. Tính kế thừa làm cho mã của chúng ta trở nên “KHÔ” hơn và tăng khả năng sử dụng lại. DRY-ness dẫn đến tăng khả năng đọc và khả năng đọc dẫn đến khả năng bảo trì. Luôn quan tâm và cân nhắc khi nào chúng ta có thể triển khai tính kế thừa sẽ dẫn đến việc dọn dẹp các chương trình có khả năng mở rộng hơn
đa hìnhTrong ngôn ngữ lập trình và lý thuyết kiểu, tính đa hình là việc cung cấp một giao diện duy nhất cho các thực thể thuộc các kiểu khác nhau hoặc việc sử dụng một ký hiệu duy nhất để biểu thị nhiều kiểu khác nhau.
- Wikipedia
Trong OOP, tính đa hình được thể hiện phổ biến nhất bởi các lớp con chạy cùng một phương thức kế thừa trả về các giá trị khác nhau. Hãy tưởng tượng một lớp cha Animal, với một phương thức “move[]”. Bây giờ hãy tưởng tượng hai lớp con, ốc sên và con chó, khi chúng ta chạy SnailClassInstance. move[], đầu ra của chúng ta có thể là “inch trên sàn. ” So sánh kết quả này với kết quả chúng tôi nhận được khi chạy dogClassInstance. di chuyển [], “tinh nghịch phi nước kiệu trên mặt đất. ”
Tính đa hình cho phép chúng ta có một sự kế thừa năng động hơn, điều này sẽ cho phép chúng ta sử dụng sự kế thừa nhiều hơn cho các giá trị mà nó cung cấp
Phần kết luậnViết một vài lớp và khởi tạo một vài đối tượng và kết luận rằng chúng ta đang thực hành OOP là không đủ. Để thực sự thực hành OOP, chúng ta phải luôn ghi nhớ những trụ cột chính này và phát huy hết khả năng của chúng. Bằng cách sử dụng đầy đủ các phương pháp này, chúng tôi có thể thu được giá trị thực tế của OOP