Bài viết thứ 2 trong sesries học PHP OOP chúng ta sẽ tìm hiểu về Class (Lớp), Properties (Thuộc tính) và Method (Phương thức) trong lập trình hướng đối tượng PHP. Để nắm rõ lại kiến thức về lập trình hướng đối tượng, tính chất cũng như ưu và nhược điểm thì các bạn hãy đọc lại bài 1 Lập trình hướng đối tượng là gì nhé!
Trong lập trình hướng đối tượng, bạn tương tác với ứng dụng của mình bằng cách sử dụng các object. Điều này trái ngược với lập trình thủ tục (procedural), nơi bạn chủ yếu tương tác với các hàm và biến toàn cục.
Trong OOP, có khái niệm về “class“, được sử dụng để mô hình hóa hoặc ánh xạ một thực thể trong thế giới thực sang một template dữ liệu (properties – các thuộc tính) và chức năng (methods – các phương thức). Một “object” là giá trị của một class và bạn có thể tạo nhiều giá trị trong cùng một class đó.
Ví dụ: Một class Employee
sẽ có nhiều object là giá trị của class này như: fristname
, lastname
, name
, address
,…
Lớp ( Class ) trong PHP là gì?
Lớp (class) nghĩa là một khung kịch bản của một đối tượng, hoặc bạn có thể hiểu đối tượng được tạo ra từ một lớp. Trong lớp nó sẽ có tập hợp các thuộc tính (properties), và lớp nó có thể chứa các hàm mà các hàm này chúng ta gọi nó là phương thức (method). Lớp (class) có thể được ví như là một mẫu khung mô tả trạng thái, hành động của đối tượng đó, trong khi các đối tượng chỉ là các thể hiện riêng lẻ của một lớp!
Ví dụ:
- Chiếc xe là 1 class, trong chiếc xe đó nó có các thuộc tính như màu đỏ, 1 cầu 2 cầu, và các hành động như chạy, lùi, thắng ta xem như một phương thức,…
- Khi nói về “con người”, đó là một class, chúng ta có thể hình dung ra được các đặc điểm chung về con người như màu tóc, màu da, màu mắt, dáng người, số đo 3 vòng,.. tất cả các yếu tố đó gọi là thuộc tính.
Nếu xét về mặt quan hệ thì mỗi một đối tượng thì sẽ có một hoặc nhiều lớp (class), và ở trong class thì sẽ có một hoặc nhiều các thuộc tính, phương thức khác nhau.
Để khai báo class trong PHP thì chúng ta sử dụng cú pháp sau:
<?php class Employee { //this is code }
Trong đó: Employee là tên của class.
Quy tắc đặt tên class trong PHP
- Phải được bắt đầu bằng ký tự hoặc dấu _
- Không được bắt đầu bằng số
- Có thể chứa ký tự A-z, ký số 0-9 hoặc dấu _
- Được Viết Hoa các ký tự đầu tiên của mỗi từ
Cách tốt nhất để hiểu các khái niệm mới là qua ví dụ. Vì vậy, hãy xem class Employee
trong snippet sau:
<?php class Employee { // Các properties private $first_name; private $last_name; private $age; private $address; //Các method public function __construct($first_name, $last_name, $age, $address) // hàm __construct là 1 hàm khơi tạo, bạn sẽ được học về nó ở bài sau. { $this->first_name = $first_name; $this->last_name = $last_name; $this->age = $age; $this->address = $address; } public function getFirstName() { return $this->first_name; } public function getLastName() { return $this->last_name; } public function getAge() { return $this->age; } public function getAddress() { return $this->address; } }
Câu lệnh class Employee
trong dòng số 2 định nghĩa class Employee
. Sau đó, chúng ta tiếp tục khai báo các thuộc tính, hàm constructor và các phương thức class khác.
Ngoài ra cấu trúc của một class còn có thêm 2 hàm khác nữa:
- Hàm constructor là một phương thức class đặc biệt tự động được gọi khi bạn khởi tạo một object.
- Hàm destructor là hàm được gọi khi đối tượng bị hủy hoặc tập lệnh bị dừng hoặc thoát.
Thuộc tính – properties class trong PHP
Trong tự nhiên, thuộc tính được hiểu nôm na là các tính chất mô tả về đặc điểm của một sự vật, sự việc nào đó.
- Ví dụ đối tượng động vật có những thuộc tính như: mắt, mũi, tai, chân thì những thứ đó cũng chính là thuộc tính của lớp động vật.
Trong lập trình, thuộc tính (properties) là các biến hay các hằng dùng để lưu trữ dữ liệu chứa thông tin về object và kèm theo cơ chế truy cập của nó.
- Trong ví dụ về
Employee
ở snippet trên, chúng ta đã xác định các thuộc tínhfirst_name
,last_name
,age
vàaddress
. Trong đa số các trường hợp, các thuộc tính của class được truy xuất thông qua các object được khởi tạo.
Cú pháp để khai báo thuộc tính (properties) trong class của PHP đơn giản như sau:
<?php class Name { //đối với thuộc tính động var $propertyName; //đối với thuộc tính cố định (hằng số) const $constName = value; }
Trong đó:
- Để khai báo thuộc tính động(biến) thì chúng ta sử dụng từ khóa
var
, và chúng ta cũng có thể thiết lập giá trị luôn cho biến bằng phép gán. ví dụ:$propertyName= 'Nguyễn Văn Bê';
- Để khai báo thuộc tính cố định thì chúng ta sử dụng từ khóa
const
, với thuộc tính này thì chúng ta không thể thay đổi giá trị của nó (giống hằng). - Tên của thuộc tính (properties) cũng được bao gồm các ràng buộc giống như đặt tên biến và hằng trong PHP.
Phương thức – Method trong PHP
Phương thức (Method ) của lớp chính là phương thức của đối tượng, đó là những hành động (hành vi) của đối tượng.
Trong tự nhiên, phương thức sẽ được hiểu nôm na như là các hành động của một sự vật, sự việc nào đó.
- Ví dụ đối tượng động vật thì có một số phương thức như: bay, nhảy, chạy, bơi,…
Đối với lập trình, phương thức của class là các hàm thực hiện các hành động cụ thể được liên kết với các object.
Dụa vào phần ví dụ trong Employee
ở snippet bên trên, chúng ta sẽ xác định được phương thức getLastName
, nó sẽ trả về giá trị một chuỗi là last name được liên kết với object.
Như vậy, ta có thể mô phỏng được cú pháp của phương thức (Method) trong PHP như sau:
<?php class Name { //method function methodName() { //code } }
- methodName là tên của phương thức mà bạn muốn tại trong class.
Vậy là chúng ta đã điểm qua những khái niệm cần nắm rõ trong bài học này, bây giờ các bạn cùng mình đi qua phần thực hành và học thêm một số lý thuyết, khái niệm cũng như kiến thức mới ở phần thực hành này nhé!
Thực hành với Class, Properties, Method PHP
Học phải đi đôi với hành, đặc biệt trong lập trình hướng đối tượng có rất nhiều vấn đề rắc rối nên chúng ta cần phải tự thực hành nhiều thì mới mau chóng phát triển kỹ năng các bạn nhé!
Khởi tạo một object của class trong PHP
Khi bạn muốn sử dụng một class, bạn cần khởi tạo nó và kết quả cuối cùng là một object. Vì vậy, chúng ta có thể nghĩ về một class như một bản thiết kế và một object là một phiên thực tế mà bạn có thể làm việc được.
Để khởi tạo một object của class trong PHP thì chúng ta sẽ sử dụng cú pháp sau:
new ClassName(); //ClassName là tên của class các bạn cần khởi tạo
Sau đó bạn sẽ gán nó vào một biến với kiểu dữ liệu là một object bằng phép gán để sử dụng trong PHP.
<?php //cú pháp: $variable = new className(); //ví dụ $nhanVienA = new Employee();
Bạn cần sử dụng từ khóa new
khi bạn muốn khởi tạo một object của bất kỳ class nào cùng với tên class của nó và bạn sẽ nhận lại một giá trị object mới của class đó.
Lưu ý: Bạn cần phải phân biệt được 2 khái niệm là: Khởi tạo một đối tượng, một lớp và khái niệm thứ 2 là Khai báo một đối tượng hoặc một lớp.
Khai báo đối tượng hay lớp là ta tạo một lớp (class) của đối tượng đó có chứa các thuộc tính và phương thức tùy ý. Còn khởi tạo đối tượng là ta sẽ tạo ra một hình tượng cụ thể từ chính cái lớp mà ta đã khai báo.
Bạn hãy xem ví dụ dưới đây để hiểu rõ về lưu ý trên:
<?php // Khai báo Lớp (đối tượng) là Nhân Viên class Employee { // Các thuộc tính public $first_name; public $last_name; public $age; protected $address; // Các phương thức public function getFirstName() { return $this->first_name; } public function getLastName() { return $this->last_name; } public function getAge() { return $this->age; } public function getAddress() { return $this->address; } } // Khởi tạo các lớp nhân viên mới //Bạn có thể tạo nhiều object của cùng một class, như được hiển thị trong đoạn code sau. $nhanVienHanhChinh = new Employee(); $nhanVienLamCong = new Employee();
Truy xuất đến các thuộc tính của đối tượng trong class PHP
Để truy xuất đến các thuộc tính của đối tượng ta dùng toán tử (->) để trỏ đến.
Cú pháp: $classname->method
Từ snippet khai báo class nhân viên bên trên, ta tiếp tục sửa lại đoạn code từ dòng 30 và dán đoạn code bên dưới vào, sau đó chạy trên trình duyệt thử nhé!
// Khởi tạo các lớp nhân viên mới $nhanVienHanhChinh = new Employee(); // Gán giá trị cho các thuộc tính $nhanVienHanhChinh->first_name = 'Nguyen'; $nhanVienHanhChinh->last_name = 'Dang Phuong'; // Lấy các giá trị và xuất ra màn hình echo $nhanVienHanhChinh->first_name . ' ' . $nhanVienHanhChinh->last_name;
Kết quả ở màn hình sẽ là: Nguyen Dang Phuong
Gọi các phương thức của đối tượng trong class
Cũng tương tự như truy xuất đến các thuộc tính của đối tượng, ta dùng toán tử (->) để gọi các hàm trong đối tượng.
Cú pháp: $classname->function();
Bây giờ, cũng từ ví dụ về class Employee trong bài học này, mình sẽ khởi tạo class mới và truy xuất phương thức có trong class qua ví dụ bên dưới nhé:
<?php // Khai báo Lớp (đối tượng) là Nhân Viên class Employee { // Các phương thức public function getName() { echo 'Nguyen Dang Phuong'; } //mình sẽ thêm một phương thức có thêm 2 argument vào public function getInfo($first_name, $last_name, $age, $address) { return $first_name . ' ' . $last_name . ' ' . $age . ' ' . $address; } } // Khởi tạo các lớp nhân viên mới $nhanVienHanhChinh = new Employee(); // Gọi đến phương thức getName() và xuất ra màn hình $nhanVienHanhChinh->getName(); echo '<br>'; //Gọi đến phương thức getInfo có yêu cầu thêm 2 argument và xuất ra màn hình echo $nhanVienHanhChinh->getInfo('Doan', 'Lam', 21, 'HCM City'); //vì phương thức này return trả về kết quả chứ chưa có lệnh xuất ra màn hình nên cần phải có echo
Kết quả màn hình:
Nguyen Dang Phuong Doan Lam 21 HCM City
Chắc hẳn có một số bạn sẽ thắc mắc vì sao trong code mình có thêm các dòng code $this->$age
hay $this->address
vào mà mình không giải thích gì phải hong nà. Đọc tới đây thì đã chính là thời điểm hợp lý nhất để mình giải thích cho các bạn rồi nè.
$this->
Để truy xuất các thuộc tính động trong chính class đó thì chúng ta dùng từ khóa this
với cú pháp: $this->propertyName;
Biến $this là biến có thể nói là được sử dụng phổ biến nhất trong lập trình hướng đối tượng.
- $this là một biến tham chiếu đến chính đối tượng được gọi.
- Để gọi một property hay method của class, ta dùng dấu
->
trước tên property hay method cần gọi.
Từ những yếu tố trên, ta có thể thấy rằng $this->
vẫn có thể sử dụng cho method class nữa các bạn nhé!
Thank khảo: https://stackoverflow.com/questions/1523479/what-does-the-variable-this-mean-in-php
Mình sẽ thêm ví dụ minh họa lại về biến $this
này nhé:
<?php class Employee { public $name; // hàm __construct là 1 hàm khơi tạo, bạn sẽ được học về nó ở các bài sau nha. function __construct( $name ) { $this->name = $name; } }; $person = new Employee('Nguyen Dang Phong'); echo $person->name; //output: Nguyen Dang Phong
Ví dụ 2: Không có hàm khởi tạo:
<?php // Khai báo Lớp (đối tượng) là Nhân Viên class Employee { //khai báo constant const NUMBER = 2; //lấy giá trị của constant public function getNumber() { //gọi thuộc tính constant trong class: ( self - Tham khảo ở các bài sau của series) return self::NUMBER; } public function total() { //gọi phương thức trong class: $this return $this->getNumber(); } } // Khởi tạo các lớp nhân viên mới $nhanVienHanhChinh = new Employee(); echo $nhanVienHanhChinh->total();
Ở các bài viết sau này, bạn sẽ được học qua về kế thừa class trong PHP, và bạn sẽ phải học các mức quyền hạn truy cập như Public, Protected, Private. Và các thuộc tính lẫn phương thức đề có thể được đặt mức truy cập trong class.
Giống như ví dụ về snippet Employee
, bạn sẽ thấy các biến đã được đặt mức private, còn các phương thức thì đang được đặt mức Public. Chúng ta sẽ tìm hiểu rõ về các mức truy cập này ở bài viết khác của series nhé!
Kết thúc
Qua bài học, mong các bạn có thể nắm thêm các kiến thức về class, properties, method trong lập trình hướng đối tượng PHP OOP mà mình đã liệt kê ở trên, đặc biệt, các bạn cần phải phân biệt được hai khái niệm về khởi tạo và khai báo một đối tượng của class trong PHP.
Bài viết nếu các sai xót mong các bạn để lại gạch đá phản hồi dưới bài viết để mình khắc phục ạ. Cảm ơn các bạn!
Thông thường những kiến thức mới bắt đầu sẽ khá là khô khan và ít đụng đến code nhiều, nhưng các bạn đừng nản chí nhé! Vì mặc dù khô khan nhưng vẫn là nền tảng để chúng ta học những kiến thức chuyên sâu sau này á.
Mong các bạn sẽ phát triển hơn trong việc học tập của bản thân và tiếp tục đón những bài viết tiếp theo trong series học PHP nâng cao OOP – lập trình PHP hướng đối tượng nhé!
Mình xin phép tổng hợp lại bài code vừa học
<?php // Khai báo Lớp (đối tượng) là Nhân Viên class Employee { // Khai báo các thuộc tính public $first_name; public $last_name; public $address; public $age; //khai báo constant const NUMBER = 2; //Khai báo Các phương thức public function getName() { echo 'Nguyen Dang Phuong'; } //mình sẽ thêm một phương thức có thêm 2 argument vào public function getInfo($first_name, $last_name, $age, $address) { return $first_name . ' ' . $last_name . ' ' . $age . ' ' . $address; } //lấy giá trị của constant public function getNumber() { //gọi thuộc tính constant trong class: ( self - Tham khảo ở các bài sau của series) return self::NUMBER; } public function total() { //gọi phương thức trong class: $this return $this->getNumber(); } } // Khởi tạo các lớp nhân viên mới $nhanVienHanhChinh = new Employee(); //phần 1 : xuất giá trị của thuộc tính // Gán giá trị cho các thuộc tính $nhanVienHanhChinh->first_name = 'Nguyen'; $nhanVienHanhChinh->last_name = 'Dang Phuong'; // Lấy các giá trị và xuất ra màn hình echo $nhanVienHanhChinh->first_name . ' ' . $nhanVienHanhChinh->last_name; echo '<br>'; //phần 2 : xuất giá trị của phương thức // Gọi đến phương thức getName() và xuất ra màn hình $nhanVienHanhChinh->getName(); echo '<br>'; //Gọi đến phương thức getInfo có yêu cầu thêm 2 argument và xuất ra màn hình echo $nhanVienHanhChinh->getInfo('Doan', 'Lam', 21, 'HCM City'); //vì phương thức này return trả về kết quả chứ chưa có lệnh xuất ra màn hình nên cần phải có echo echo '<br>'; //Phần 3: Gọi phương thức trong class với $this-> echo $nhanVienHanhChinh->total();
Xem thêm:
- Bài 3: Magic methods trong PHP
- Bài 1: Ngôn ngữ lập trình PHP là gì và hướng dẫn thiết lập môi trường để lập trình PHP
- Lộ trình học PHP từ cơ bản đến nâng cao chuyên nghiệp
- Hướng dẫn viết một Extension cơ bản trên Chrome
- 8 điểm so sánh giữa MySQL và PostgreSQL để lựa chọn sử dụng phù hợp
- Bài 1: XML là gì? Tổng quan về XML
- Top 5 giải pháp làm việc hiệu quả tại nhà
- Vai trò Apache và PHP Hoạt Động Cùng Nhau Như Thế Nào
Nếu các bạn cảm thấy Website TanHongIT.Com thật sự hữu ích mình mong các bạn có thể chia sẻ những bài viết đến cho cộng đồng cùng thao khảo nhé. Cảm ơn các bạn !!!
Các bạn có bất kì thắc mắc cần được hỗ trợ hay yêu cầu các phần mềm, thủ thuật, khoá học,… thì cứ để lại comment bên dưới bài viết hoặc liên hệ qua fanpage của TanHongIT để được hỗ trợ nhé! Mình sẽ cố gắng chia sẻ cho các bạn mọi thứ cần thiết nhất!