PHP là một ngôn ngữ lập trình web hỗ trợ cả lập trình theo hướng thủ tục và theo hướng đối tượng. Khi mới bắt đầu làm quen với PHP phần lớn chúng ta thường gặp các ví dụ được lập trình theo hướng thủ tục tuy nhiên trong thực tế và trong các framework PHP hiện nay phần lớn mã PHP đều được viết theo hướng đối tượng

Lập trình hướng đối tượng là gì?

Lập trình hướng đối tượng (OOP) là kiểu viết mã sử dụng lớp (classes), quan hệ (relationships), thuộc tính (properties) và phương thức (methods) của đối tượng (objects) nhằm giảm thời gian viết mã và giúp đơn giản hóa việc lập trình. Các đặc điểm của lập trình hướng đối tượng:

  • Tính trừu tượng (Abstraction )
  • Tính đóng gói (Encapsulation)
  • Tính kế thừa (Inheritance)
  • Tính đa hình (Polymorphism)

php oop

Đơn vị cơ bản trong lập trình hướng đối tượng đó chính là lớp (Class). Hầu hết các đối tượng trong thế giới thực sẽ được phản ánh thông qua lớp. Chẳng hạn chúng ta xây dựng hệ thống quản lý sinh viên với các đối tượng như sinh viên, khoa, môn học, giảng viên thì khi đó chúng ta sẽ ánh xạ các đối tượng này thành các lớp là lớp SinhVien, lớp Khoa, lớp MonHoc, lớp GiangVien. Các lớp này bạn hình dung giống như một khuôn đúc để từ đó chúng ta có thể tạo ra hàng loạt đối tượng với cùng một khuôn. Chẳng hạn với Class SinhVien chúng ta có thể khởi tạo ra nhiều đối tượng SinhVien có tên, tuổi và lớp khác nhau.

Ứng với mỗi đối tượng sinh viên chúng ta sẽ có các thuộc tính như tên, tuổi, lớp và khi chuyển sang hướng đối tượng các thuộc tính này chính là các thuộc tính của lớp SinhVien. Một sinh viên có thể thực hiện các công việc như đăng ký môn học, hủy môn học - các hành động này chính là phương thức của đối tượng SinhVien. Như vậy chúng ta đã hình dung sơ qua về lớp, thuộc tính và phương thức. Bây giờ chúng ta sẽ tìm hiểu chi tiết hơn về cách khai báo của lớp, thuộc tính và phương thức trong lập trình PHP.

Khai báo lớp:

class MyClass {
// Class properties and methods go here
}

Tên lớp được khai báo bằng từ khóa class. Thông thường tên lớp thường được viết hoa chữ cái đầu tiên của mỗi chữ. Sau khi tạo ra class, bạn có thể khởi tạo và lưu trữ chúng trong một biến bằng cách sử dụng từ khóa new:
Ví dụ: $obj = new MyClass();

 Khai báo thuộc tính:

class Student {
public $name = "Larry Page";
const FACULTY = “IT";
}
$obj = new Student(); echo $obj->name;
  • Thuộc tính được sử dụng để lưu trữ dữ liệu cho lớp. Chúng hoạt động tương tự như các biến thông thường, chỉ khác một điều là chúng đang liên kết với object và vì thế để có thể truy cập và sử dụng được chúng cần phải thông qua object.
  • Tên của thuộc tính được đặt đúng theo chuẩn cú pháp đặt tên cho biến (thông thường tên thuộc tính được viết hoa chữ cái đầu tiên trong mỗi từ, riêng chữ cái đầu viết thường).
  • Cú pháp định nghĩa hằng trong OOP : const CONSTANT_NAME
  • Truy cập thuộc tính thông qua cú pháp: objectName->propertyName

Trong ví dụ trên bạn thấy có từ khóa public. Từ khóa public được sử dụng để chỉ định thuộc tính hoặc phương thức có thể được truy cập từ bất kỳ đâu (trong bản thân chính lớp đó, các lớp kế thừa và từ các lớp khác).

 Phương thức

class Student{
private $name = “Jack";
public function setName($newName){
$this->name = $newName;
}
public function getName(){
return $this->name . "<br />";
}
} 
$obj = new Student(); $obj->setName('Peter'); $obj->getName();
  • Phương thức là các hàm được định nghĩa trong lớp nhằm biểu diễn hành động của một đối tượng.
  • Truy cập phương thức thông qua cú pháp: objectName->methodName;

Trong ví dụ trên bạn thấy có từ khóa là private và $this:

  • private: chỉ định thuộc tính hoặc phương thức chỉ có thể truy cập trong bản thân chính lớp đó.
  • $this: chỉ định tham chiếu đến đối tượng hiện tại. Khi ở trong 1 phương thức của lớp sử dụng $this cũng tương tự như bạn sử dụng đến tên đối tượng ở ngoài lớp.