Lập trình hướng đối tượng (Object-Oriented Programming - OOP) là một phương pháp lập trình trong đó phần mềm được xây dựng dựa trên các đối tượng (objects). Các đối tượng này là các thực thể cụ thể, đại diện cho các khái niệm, thực thể trong thế giới thực hoặc trừu tượng hóa. Các đối tượng có trạng thái (thuộc tính) và hành vi (phương thức), đồng thời chúng có thể tương tác với nhau. Bài viết sẽ trình bày các khái niệm cơ bản của OOP như lớp (class), đối tượng (object), tính kế thừa (inheritance), tính đóng gói (encapsulation), tính đa hình (polymorphism) và tính trừu tượng (abstraction).. Trong bài viết này, chúng ta sẽ cùng tìm hiểu về OOP trong PHP, các khái niệm cốt lõi, và cách áp dụng OOP vào phát triển phần mềm.
1. OOP là gì?
OOP (Object-Oriented Programming) là phương pháp lập trình dựa trên khái niệm "đối tượng" (objects), trong đó dữ liệu và các chức năng liên quan được nhóm lại với nhau thành một thực thể riêng biệt. Một đối tượng có thể là bất cứ thứ gì: một cái xe, một người, một tài khoản ngân hàng, hay thậm chí là một giao dịch trong phần mềm.
Trong OOP, mã được tổ chức thành các lớp (classes), mô tả các đối tượng có cùng tính chất và hành vi. Các class được sử dụng để tạo ra các đối tượng (objects), và những đối tượng này sẽ tương tác với nhau trong chương trình.
2. Các khái niệm cơ bản trong OOP
Để hiểu rõ hơn về OOP trong PHP, chúng ta cần làm quen với một số khái niệm cơ bản:
2.1. Class
Một class là khuôn mẫu để tạo ra các đối tượng. Nó định nghĩa các thuộc tính (properties) và phương thức (methods) mà các đối tượng sẽ có. Class giống như bản thiết kế, còn đối tượng là thực thể cụ thể được tạo ra từ bản thiết kế đó.
class Car {
public $color;
public $model;
public function __construct($color, $model) {
$this->color = $color;
$this->model = $model;
}
public function getCarInfo() {
return "The car is a " . $this->color . " " . $this->model;
}
}2.2. Object (đối tượng)
Một Object là một thực thể được tạo ra từ class. Mỗi object có thể có các thuộc tính và hành vi khác nhau, nhưng chúng đều tuân theo khuôn mẫu mà class cung cấp.
$myCar = new Car('red', 'Toyota');
echo $myCar->getCarInfo(); // Output: The car is a red Toyota2.3. Property (thuộc tính)
Property là các biến lưu trữ thông tin của một object. Chúng được định nghĩa trong class và mỗi object có thể có các giá trị property khác nhau.
2.4. Method (phương thức)
Method là các hàm được định nghĩa bên trong class, dùng để thao tác với các thuộc tính và thực hiện các chức năng liên quan đến đối tượng.
2.5. Inheritance (kế thừa)
Kế thừa là tính năng cho phép một class (class con) kế thừa các thuộc tính và phương thức từ một class khác (class cha). Điều này giúp giảm thiểu sự trùng lặp mã và tạo nên sự linh hoạt trong việc mở rộng các tính năng của class.
class ElectricCar extends Car {
public $batteryCapacity;
public function __construct($color, $model, $batteryCapacity) {
parent::__construct($color, $model);
$this->batteryCapacity = $batteryCapacity;
}
public function getCarInfo() {
return parent::getCarInfo() . " with battery capacity of " . $this->batteryCapacity . " kWh";
}
}
$myTesla = new ElectricCar('blue', 'Tesla Model S', 100);
echo $myTesla->getCarInfo(); // Output: The car is a blue Tesla Model S with battery capacity of 100 kWh2.6. Encapsulation (đóng gói)
Đóng gói là cơ chế giúp bảo vệ các thuộc tính của đối tượng khỏi bị truy cập từ bên ngoài. Chỉ các phương thức bên trong class mới có quyền thay đổi các thuộc tính đó. Điều này được thực hiện thông qua các từ khóa truy cập: public, private, và protected.
public: Có thể truy cập từ bất kỳ đâu.private: Chỉ có thể truy cập từ bên trong class định nghĩa.protected: Có thể truy cập từ class định nghĩa và các class con.
class Person {
private $name;
private $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
public function getDetails() {
return $this->name . " is " . $this->age . " years old.";
}
}
$person = new Person('John', 30);
// echo $person->name; // Lỗi: không thể truy cập thuộc tính private
echo $person->getDetails(); // Output: John is 30 years old.2.7. Polymorphism (đa hình)
Đa hình là khả năng sử dụng một phương thức với các đối tượng thuộc các class khác nhau mà kết quả có thể khác nhau. Điều này giúp chương trình linh hoạt và dễ mở rộng hơn. Polymorphism được thực hiện thông qua kế thừa và ghi đè phương thức (method overriding).
class Animal {
public function makeSound() {
return "Some generic sound";
}
}
class Dog extends Animal {
public function makeSound() {
return "Woof woof";
}
}
class Cat extends Animal {
public function makeSound() {
return "Meow";
}
}
$dog = new Dog();
$cat = new Cat();
echo $dog->makeSound(); // Output: Woof woof
echo $cat->makeSound(); // Output: Meow3. Ưu điểm của lập trình OOP
Lập trình hướng đối tượng mang lại nhiều lợi ích:
- Tái sử dụng mã: Các class có thể tái sử dụng và mở rộng trong nhiều phần khác nhau của ứng dụng.
- Bảo trì dễ dàng: Dữ liệu và hành vi được gói gọn trong các đối tượng, giúp cho việc sửa lỗi và nâng cấp dễ dàng hơn.
- Quản lý dự án lớn: OOP giúp tổ chức mã nguồn theo các thực thể riêng biệt, dễ quản lý và phân quyền phát triển.
4. Kết luận
OOP là một kỹ thuật lập trình mạnh mẽ trong PHP, giúp tối ưu hóa việc quản lý mã nguồn, tăng cường khả năng tái sử dụng và duy trì ứng dụng. Hiểu rõ các khái niệm cốt lõi như class, đối tượng, kế thừa, đóng gói, và đa hình sẽ giúp bạn xây dựng các ứng dụng PHP mạnh mẽ và linh hoạt hơn.
Trong bài học tiếp theo, chúng ta sẽ đi sâu hơn vào việc sử dụng các tính năng nâng cao của OOP trong PHP như interface, abstract class, và trait. Hãy cùng đón đọc!








