Khái niệm Lập trình hướng đối tượng (OOP) trong PHP kèm ví dụ.
⚡ Tóm tắt thông minh
Lập trình hướng đối tượng trong PHP mô hình hóa một ứng dụng dựa trên các đối tượng trong thế giới thực bằng cách sử dụng các lớp và đối tượng. Hướng dẫn này giải thích các nguyên tắc lập trình hướng đối tượng như đóng gói, kế thừa và đa hình, cách PHP hỗ trợ chúng, và xây dựng các ví dụ về lớp, kế thừa và giao diện từng bước một.

OOP là gì?
Lập trình hướng đối tượng là một phương pháp phát triển phần mềm mô phỏng ứng dụng dựa trên các đối tượng trong thế giới thực như nhân viên, ô tô và tài khoản ngân hàng. Một lớp định nghĩa các thuộc tính và phương thức của một đối tượng trong thế giới thực. Một đối tượng là một thể hiện của một lớp.
Ba thành phần cơ bản của định hướng đối tượng là:
- Phân tích hướng đối tượng – chức năng của hệ thống
- Thiết kế hướng đối tượng – kiến trúc của hệ thống
- Lập trình hướng đối tượng – triển khai ứng dụng
Nguyên tắc lập trình hướng đối tượng
Ba nguyên tắc chính của lập trình hướng đối tượng (OOP) là:
- Đóng gói – Điều này liên quan đến việc che giấu các chi tiết triển khai và chỉ để lộ các phương thức. Mục đích chính của đóng gói là:
- Giảm độ phức tạp khi phát triển phần mềm – bằng cách ẩn các chi tiết triển khai và chỉ hiển thị các hoạt động, việc sử dụng lớp trở nên dễ dàng.
- Bảo vệ trạng thái nội bộ của đối tượng – việc truy cập vào các biến của lớp được thực hiện thông qua các phương thức như get và set. Điều này giúp lớp trở nên linh hoạt và dễ bảo trì.
- Cho phép thay đổi cách triển khai nội bộ của lớp mà không cần lo lắng về việc làm hỏng mã sử dụng lớp đó.
- di sản – Điều này liên quan đến mối quan hệ giữa các lớp. Mối quan hệ này có dạng cha và con. Lớp con sử dụng các phương thức được định nghĩa trong lớp cha. Mục đích chính của kế thừa là:
- Khả năng tái sử dụng – nhiều lớp con có thể kế thừa từ cùng một lớp cha. Điều này rất hữu ích khi chúng ta cần cung cấp các chức năng chung như thêm, cập nhật và xóa dữ liệu khỏi cơ sở dữ liệu.
- Tính đa hình – Điều này liên quan đến việc có một giao diện duy nhất với nhiều cách triển khai khác nhau. Mục đích chính của đa hình là:
- Nhằm đơn giản hóa việc bảo trì ứng dụng và giúp chúng dễ mở rộng hơn.
Giáo sư Concepts bằng PHP
PHP là một ngôn ngữ lập trình kịch bản hướng đối tượng; nó hỗ trợ tất cả các nguyên tắc nêu trên. Các nguyên tắc trên được thực hiện thông qua:
- Đóng gói – thông qua việc sử dụng các phương thức “get” và “set”, và các công cụ sửa đổi quyền truy cập.
- di sản – thông qua việc sử dụng từ khóa extends
- Tính đa hình – thông qua việc sử dụng từ khóa implements
Bây giờ chúng ta đã có kiến thức cơ bản về OOP và cách nó được hỗ trợ trong PHPChúng ta hãy cùng xem xét một số ví dụ minh họa các nguyên tắc trên.
UML là gì?
Ngôn ngữ mô hình hóa thống nhất (UML) là một kỹ thuật được sử dụng để thiết kế và lập tài liệu cho các hệ thống hướng đối tượng.
UML tạo ra nhiều loại tài liệu, nhưng chúng ta sẽ xem xét sơ đồ lớp, một sơ đồ rất quan trọng đối với lập trình PHP hướng đối tượng.
Ví dụ về sơ đồ lớp
Khóa sơ đồ lớp
- hộp trên chứa tên lớp
- hộp giữa chứa các biến lớp
- hộp dưới chứa các phương thức lớp
- dấu trừ (-) ký hiệu này có nghĩa là phạm vi riêng tư
- cộng (+) dấu hiệu có nghĩa là phạm vi công cộng
- hàm băm (#) dấu hiệu có nghĩa là phạm vi được bảo vệ
Cách tạo một lớp trong PHP
Từ khóa class được sử dụng để định nghĩa một lớp trong PHP. Dưới đây là các quy tắc để tạo một lớp trong PHP.
- Tên lớp nên bắt đầu bằng một chữ cái
- Tên lớp không thể là từ dành riêng cho PHP
- Tên lớp không được chứa dấu cách
Giả sử chúng ta muốn tạo một lớp để biểu diễn các loài động vật. Chúng ta sẽ bắt đầu bằng việc xác định các đặc điểm chung của tất cả các loài động vật.
- Tất cả các loài động vật đều thuộc một họ, ví dụ như động vật ăn cỏ, động vật ăn thịt, v.v.
- Tất cả các loài động vật đều ăn thức ăn
Sơ đồ dưới đây thể hiện sơ đồ lớp của loài động vật.
Bây giờ chúng ta hãy lập trình lớp Animal.
<?php class Animal { private $family; private $food; public function __construct($family, $food) { $this->family = $family; $this->food = $food; } public function get_family() { return $this->family; } public function set_family($family) { $this->family = $family; } public function get_food() { return $this->food; } public function set_food($food) { $this->food = $food; } } ?>
ĐÂY,
- “private $family, $food” có nghĩa là các biến này không thể được truy cập trực tiếp từ bên ngoài lớp (đóng gói).
- “public function __construct($family…)” là phương thức khởi tạo của PHP. Hàm này được gọi mỗi khi một thể hiện của lớp được tạo ra. Trong trường hợp này, chúng ta đang thiết lập gia đình và thức ăn.
- “public function get…()” là phương thức được sử dụng để truy cập giá trị họ hàng hoặc giá trị thực phẩm (đóng gói).
- “public function set…()” là phương thức được sử dụng để thiết lập giá trị cho nhóm hoặc thực phẩm (đóng gói).
Cách triển khai kế thừa trong PHP
Chúng ta sẽ làm việc với một con bò và một con sư tử. Cả bò và sư tử đều kế thừa từ lớp Động vật.
Sơ đồ lớp dưới đây cho thấy các mối quan hệ.
Lưu ý rằng lớp Cow kế thừa từ lớp Animal và tự định nghĩa các biến và phương thức riêng của nó.
Bây giờ chúng ta hãy lập trình lớp Cow.
<?php class Cow extends Animal { private $owner; public function __construct($family, $food) { parent::__construct($family, $food); } public function set_owner($owner) { $this->owner = $owner; } public function get_owner() { return $this->owner; } } ?>
Bây giờ chúng ta hãy lập trình lớp Lion.
<?php class Lion extends Animal { public function __construct($family, $food) { parent::__construct($family, $food); } } ?>
ĐÂY,
- “class … extends Animal” khiến các lớp Cow và Lion sử dụng các phương thức từ lớp Animal (kế thừa).
Cách tạo một đối tượng của lớp
Vì mục đích đơn giản, các lớp Động vật, Bò và Sư tử nên nằm trong cùng một thư mục.
Bây giờ chúng ta hãy tạo ứng dụng sử dụng các lớp mà chúng ta đã tạo.
Ví dụ về lớp PHP
<?php require 'Animal.php'; require 'Cow.php'; require 'Lion.php'; $cow = new Cow('Herbivore', 'Grass'); $lion = new Lion('Carnivore', 'Meat'); echo '<b>Cow Object</b> <br>'; echo 'The Cow belongs to the ' . $cow->get_family() . ' family and eats ' . $cow->get_food() . '<br><br>'; echo '<b>Lion Object</b> <br>'; echo 'The Lion belongs to the ' . $lion->get_family() . ' family and eats ' . $lion->get_food(); ?>
Kiểm tra ứng dụng của chúng tôi
Bây giờ chúng ta hãy xem ứng dụng của mình trên trình duyệt web.
Cả hai đối tượng đều sử dụng lại các phương thức get_family và get_food được kế thừa từ lớp Animal, điều này thể hiện rõ tính kế thừa trong thực tế.
Cách triển khai đa hình trong PHP
Giả sử chúng ta muốn phát triển một ứng dụng kết nối với nhiều hệ thống cơ sở dữ liệu khác nhau, chẳng hạn như... MySQL và SQL Máy chủ nhưng sử dụng cùng một giao diện thống nhất. Chúng ta có thể tạo một giao diện định nghĩa các phương thức chuẩn và một giao diện tuyệt đối.tracLớp t thực hiện các phương thức chung.
- Giao thức – nó tương tự như một lớp học. Nó chỉ định nghĩa các phương thức và tham số.
- Abstraclớp t – đó là lớp không thể được sử dụng để tạo đối tượng một cách trực tiếp. Mục đích của nó là cung cấp việc triển khai một phần hoặc toàn bộ các phương pháp phổ biến.
Sơ đồ lớp dưới đây minh họa mối quan hệ giữa các lớp của chúng ta.tracLớp t, giao diện và các lớp triển khai.
Giờ chúng ta hãy cùng tập luyện cơ bụng nào!traclớp t.
<?php abstract class DBCommonMethods { private $host; private $db; private $uid; private $password; public function __construct($host, $db, $uid, $password) { $this->host = $host; $this->db = $db; $this->uid = $uid; $this->password = $password; } } ?>
ĐÂY,
- “cơ bụngtrac"lớp t" có nghĩa là lớp đó không thể được sử dụng trực tiếp để tạo đối tượng.
- “$host, $db…” là các biến lớp chung cho tất cả các triển khai.
- “function __construct(…)” là phương thức khởi tạo của lớp, dùng để thiết lập giá trị cho các biến chung khi khởi tạo.
Bây giờ chúng ta hãy tạo giao diện chứa các phương thức chuẩn, được triển khai khác nhau tùy thuộc vào công cụ cơ sở dữ liệu.
<?php
interface DBInterface
{
public function db_connect();
public function insert($data);
public function read($where);
public function update($where);
public function delete($where);
}
?>
ĐÂY,
- “giao diện” là từ khóa để tạo giao diện
- “chức năng công cộng…(…)” là những phương pháp tiêu chuẩn cần được triển khai
Bây giờ chúng ta hãy tạo các lớp cụ thể sẽ kế thừa lớp DBCommonMethods và triển khai giao diện DBInterface. Đầu tiên, MySQLDriver.php:
<?php class MySQLDriver extends DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password) { parent::__construct($host, $db, $uid, $password); } public function db_connect() { /* connect code goes here */ } public function delete($where) { /* delete code goes here */ } public function insert($data) { /* insert code goes here */ } public function read($where) { /* read code goes here */ } public function update($where) { /* update code goes here */ } } ?>
Tiếp theo, MSSQLServerDriver.php:
<?php class MSSQLServerDriver extends DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password) { parent::__construct($host, $db, $uid, $password); } public function db_connect() { /* connect code goes here */ } public function delete($where) { /* delete code goes here */ } public function insert($data) { /* insert code goes here */ } public function read($where) { /* read code goes here */ } public function update($where) { /* update code goes here */ } } ?>
ĐÂY,
- “class … extends DBCommonMethods” sử dụng các phương thức trong DBCommonMethods.
- “… triển khai DBInterface” đảm bảo rằng lớp này cung cấp các phương thức tiêu chuẩn bất kể trình điều khiển cơ sở dữ liệu nào được sử dụng.
Đoạn mã sử dụng các lớp trên sẽ trông như thế này:
<?php $db = new MySQLDriver($host, $db, $uid, $password); ?>
Hoặc:
<?php $db = new MSSQLServerDriver($host, $db, $uid, $password); ?>
Phần còn lại của mã sẽ giống nhau đối với cả hai trình điều khiển, ví dụ như:
<?php $db->db_connect(); $db->insert($data); ?>
Đây chính là tính đa hình trong thực tế: các lệnh gọi phương thức giống nhau hoạt động trên bất kỳ trình điều khiển nào triển khai giao diện đó, vì vậy mã xung quanh không bao giờ thay đổi khi bạn chuyển đổi công cụ cơ sở dữ liệu.





