Chắc hẳn khi các bạn tìm hiểu về thiết kế website bằng PHP đã từng nghe đến khái niệm lập trình hướng đối tượng phải không nào?
Vậy hôm nay chúng ta cùng thiết kế website Alowebtot đi tìm hiểu về lập trình hướng đối tượng trong PHP là gì nhé!
Khi bắt đầu tiếp cận lập trình với các ngôn ngữ thiết kế nói chung là cách thực hiện mã lệnh tuần tự kem theo các câu lệnh vòng lặp và các điều kiện.
Kiểu lập trình này giúp chúng ta có thể tiếp cận nhanh chóng hơn và thực hành dễ hơn. Nhưng khi các bạn vào các dự án thiết kế website thực tế thì sẽ có nhiều yếu điểm trong phát triển phần mềm nói chung.
Chính vì các điểm yếu trên xảy ra nên các kỹ sư thiết kế đã nghĩ ra một phương án được gọi là ” lập trình hướng đối tượng trong PHP “.
OPP – Lập trình hướng đối tượng trong php là gì?
Trước khi tìm hiểu lập trình hướng đối tượng trong PHP thì chúng ta cần biết lập trình hướng đối tượng là gì?
Lập trình hướng đối tượng được viết theo tiếng Latinh là OPP viết tắt của Object-Oriented Programming. Lập trình hướng đối tượng sinh ra để giải quyết một vấn đề theo một cách tư duy mới.
Ngoài thực tế chúng ta khi cần làm một việc gì đó thì chúng ta cần chú ý đến 2 điều là : hành động và thực thể bị tác động.
Để áp dụng vào lập trình thì khi mà chung ta tập chung vào hành động thì đó gọi là hương thủ tục, còn khi tập trung vào các vật thể thì được gọi là hướng đối tượng. Nhưng tóm lại thì 2 cách đó đều có kết quả cuối cùng giống nhau.
Trong OOP thì các bạn cần chú ý đến 2 khái niệm là lớp(class) và đối tượng ( object).
Để hiểu rõ hơn về 2 khai niệm trên thì chúng ta có 1 ví dụ như sau:
Khi chúng ta cần thiết kế một tòa nhà, vậy trước tiên chúng ta cần có 1 bản vẽ chi tiết về căn nhà đó. Vậy trong trường hợp này Class là một bản thiết kế, còn object là căn nhà khi xây xong. Vậy lập trình hướng đối tượng là các bạn thực hiện hóa từ bản thiết kế(class) đến căn nhà(object).
Lập trình hướng đối tượng có 4 tính chất chính:
- Tính trìu tượng
- Tính kế thừa
- Tính đóng gói
- Tính đa hình
Ưu điểm của lập trình hướng đối tượng trong PHP
Vì để nâng cấp các điểm yếu của các phương pháp lập trình cũ nên chắc chắn nó sẽ có nhiều ưu điểm vượt trội, điển hình như:
- Dễ dàng quản lý code khi có sự thay đổi chương trình
- Dễ mở rộng dự án
- Tiết kiệm tài nguyên cho hệ thống
- Có tính bảo mật cao
- Tính tái sử dụng cao
Một số khái niệm trong OPP
Đối tượng( Object)
- Trong lập trình thì sẽ được hiểu là 1 thực thể cụ thể nào đó: người, vật, bảng dữ liệu,.. gồm các thông tin: thuộc tính và phương thức.
- Thuộc tính là những thông tin, đặc điểm, tính chất của đối tượng. Như người sẽ có họ tên, ngày sinh, quê quán,…
- Phương thức là những thao tác, hành động mà thực thể đó có thể làm: ăn, ngủ, nói,..
Lớp ( Class)
Các đối tượng có đặc tính giống nhau thì sẽ được gom thành 1 lớp đối tượng gồm 2 thành phần giống Object là thuộc tính và phương thức.
Ngoài ra lớp còn được dùng để định nghĩa ra kiểu dữ liệu mới.
Cú pháp sử dụng
class Name
{
//code
}
Trong đó Name là tên của class.
Sự khác nhau giữa đối tượng và lớp
- Lớp là một khuôn mẫu còn đối tượng là một thể hiện cụ thể dựa trên khuôn mẫu đó.
- Ví dụ:
Các thông tin (thuộc tính): 2 chân, 2 mắt, có đuôi, lông, cân nặng,…
Các hành động(phương thức): kêu, đi, ăn, ngủ,…
Như vậy mọi động vật thuộc gà đều sẽ có các đặc điểm trên.
Đối tượng sẽ là một con gà cụ thể.
Các tính chất của lập trình hướng đối tượng trong PHP.
Tính trừu tượng
Trìu tượng hóa là quá trình đơn giản hóa một đối tượng mà trong đó chỉ bao gồm những đặc điểm quan tâm và bỏ quá những đặc điểm chi tiết nhỏ.
Giúp xác định được những thuộc tính, hành động nào của đối tượng cần thiết sử dụng cho chương trình.
Abstrat claas
Lớp abstract sẽ định nghĩa các hàm mà từ đó các lớp con sẽ kế thừa và Overwrite lại
Đối với lớp này thì sẽ có các điểm khác nhau như sau:
- Các hàm khi khai báo là abstract thì chỉ là định nghĩa chứ không thể viết code xử lý trong phương thức.
- Nếu trong abstract class nếu không định nghĩa là abstract thì vẫn khai báo và viết code như bình thường
- Phương thức abstract chỉ có thể khai báo trong abstract class
- Các thuộc tính trong abstract class thì không khai báo là abstract
- Không khởi tọa được một abstract class
- Mức độ khai báo là abstract chí được ở mức độ protected và public
- Các lớp kế thừa một abstract class phải định nghĩa lại tất cả các phương thức trong abstract class đó
Cú pháp khai báo abstract class
abstract class ClassName
{
}
Trong đó: ClassName là tên một class chúng ta cần khai báo.
Cú pháp khai báo một phương thức abstract:
abstract visibility function methodName();
Trong đó: visibility là một trong 2 từ khóa public, protected hặoc có thể bỏ trống( mặc định là public), methodName là tên của phương thức cần khai báo.
Ví dụ1:
abstract class ConNguoi
{
//khai báo một abstract method đúng
abstract public function getName();
//Sai vì abstract class không thể viết code xử lý được
abstract public function getHeight()
{
//
}
}
Ví dụ 2:
abstract class ConNguoi
{
protected $name;
abstract protected function getName();
}
//class này sai vì chưa định nghĩa lại phương thức abstracs getName
class NguoiLon extends ConNguoi
{
//
}
//class này đúng vì đã định nghĩa lại đầy đủ các phương thức abstract
class TreTrau extends ConNguoi
{
public function getName()
{
return $this->name;
}
}
Interface
Interface là một khuôn mẫu, giúp chúng ta tạo ra những bộ khung cho một hoặc nhiều đối tượng nhìn vào thì chúng ta hoàng tàon có thể xác định được các phương thức và thuộc tính cố định.
Cú pháp khai báo interface
interface InterfaceName
{
}
Tính chất của interface
- InterFace không phải là một đối tượng
- Trong interface chỉ được khai báo chứ không được định nghĩa
- Chỉ khai báo được hằng mà không khai báo được biến
- Không thể khởi tạo
- Cáp lớp implementr interface thì phải khai báo và định nghĩa lại các phương thức có trong interface đó
- Một class có thể implements nhiều interface
- Các interface cso thể kế thừa lẫn nhau
Tính kế thừa
Tính kế thừa trong lập trình hướng đối tượng cho phép một lớp ( class) cso thể kế thừa các thuộc tính và phương thức từ các lớp khác đã được định nghĩa. Lớp được kế thừa còn lại được gọi là lớp cha và lớp kế thừa gọi là lớp con.
Trong PHP cú pháp khai báo là:
class childClass extends parentClass
{
//code
}
Trong đó childClass là class mà các bạn muốn khởi tạo
Tính đóng gói
Tính đóng gói không cho phép người dùng hay đối tượng khác thay đổi dữ liệu thành viên của đối tượng nội tại. Chỉ có các hàm thành viên của đối tượng đó mới có quyền thay đổi nội tại của nó mà thôi. Trong PHP việc đóng gói được thực hiện nhờ sử dụng các từ khóa public, private, protected.
Tính đa hình
Tính đa hình là sự đa hình của mỗi hành động cụ thể ở những đối tượng khác nhau. Ví dụ ở các con vật có hình thức ăn khác nhau: chó ăn đá, gà ăn soi, ^^
Đó là sự đa hình trong thực tế, còn đa hình trong lập trình có nghĩa là sự ghi đè của lớp con lên lớp cha.
Các class cùng implement một interface nhưng chúng có cách thực hiện khác nhau cho các method của interface đó.
Magic methods
Magic methods là gì?
Magic methods là các phương thức đặc biệt để tạo ra giải quyết các vấn đề về sự kiện trong chương trình và đối với lập trình hướng đối tượng trong php cũng thế.
Một số Magic Methods trong PHP
- _contruct(): gọi khi khởi tạo đối tượng
- _destruct(): gọi khi hủy đối tượng
- _set(): gọi khi ta truyền dữ liệu cho một thuộc tính không được phép truy cập
- _get(): khi đọc dữ từ một thuộc tính không được phép truy cập
- _isset(): được gọi là hàm isset() hoặc empty() trên một thuộc tính không được phép truy cập
- _unset(): được gọi khi hàm unset() được sử dụng trong một thuộc tính không được phép truy cập
- _call(): được gọi một phương thức không được phép truy cập trong phạm vi của một đối tượng
- __callstatic(): được kích hoạt khi ta gọi một phương thức không được phép truy cập trong phạm vi của một phương thức tĩnh.
- __toString(): phương thức này giúp class chỉ định xem sẽ in ra cái gì khi nó được dùng.
- __invoke():phương thức này được gọi khi một lệnh cố gắng gọi một đối tượng như một hàm.
- __sleep(): được gọi khi serialize() một đối tượng.
- __wakeup: được gọi khi unserialize() đối tượng.
- __set_state(): được gọi khi chúng ta var_export() đối tượng.
- __clone(): được sử dụng khi chúng ta clone một object.
- __debugInfo(): được gọi khi chúng ta sử dụng hàm vardump().
Kết luận:
Trên đây là bài viết về khái niệm lập trình hướng đối tượng trong PHP của chúng tôi. Mong sẽ giúp ích được cho các bạn.
Bùi Anh hiện đang là tác giả viết Blog cho Alowebtot. Luôn không ngừng học hỏi, tìm kiếm và chia sẻ cho cộng đồng WordPress những kiến thức mới hơn, tối ưu hơn và tốt hơn.