Trong bài này, chúng ta sẽ tìm hiểu về lớp (class) và đối tượng (object) trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP.
Trước khi tìm hiểu về OOP trong PHP, các bạn có thể tham khảo trước series bài học Phương pháp lập trình hướng đối tượng. Series bài học này giúp các bạn có tư duy cơ bản về OOP với C++, làm cơ sở để học và hiểu OOP trong các ngôn ngữ khác dễ dàng hơn.
1. Khái niệm lớp (class) và đối tượng (object) trong PHP
Từ PHP5, chúng ta có thể viết code PHP theo phong cách lập trình hướng đối tượng (Object-Oriented Programming). Lớp (class) và đối tượng (object) là 2 khái niệm cốt lõi trong OOP.
Lớp (class) là một thiết kế (blueprint), mẫu (prototype) cho các đối tượng cùng kiểu. Đối tượng (object) là một thực thể cụ thể của lớp (class). Ví dụ:Lớp (class) Đối tượng (object) Fruit Apple Banana Mango Car Volvo Audi Toyota
Lớp (class) đóng gói các thuộc tính (attribute) và phương thức (method) chung của các đối tượng.
Thuộc tính: Một thuộc tính của một lớp là một trạng thái chung được đặt tên của lớp đó. Ví dụ: Lớp Ôtô có các thuộc tính: màu sắc, vận tốc, hãng sản xuất,…
Mỗi đối tượng của lớp có các giá trị của thuộc tính khác nhau. Ví dụ: một chiếc Ôtô bạn đang sử dụng của hãng Toyota có thể có màu đen, vận tốc 60 km/h.
Phương thức: Xác định các hoạt động chung mà tất cả các đối tượng của lớp thực hiện được. Ví dụ: Lớp Ôtô có các phương thức: tăng tốc độ, giảm tốc độ, rẽ trái, rẽ phải,…
2. Định nghĩa lớp (class) trong PHP
Sử dụng từ khóa class để định nghĩa một lớp (class) trong PHP. Theo sau từ khóa class là tên lớp và cặp dấu ngoặc nhọn {}. Các thuộc tính và phương thức của lớp được định nghĩa trong dấu ngoặc nhọn này.
<?php
class Cat {
# Properties of Cat class
public $name;
public $color;
# getter and setter methods
function set_name($name) {
$this->name = $name;
}
function get_name() {
return $this->name;
}
function set_color($color) {
$this->color = $color;
}
function get_color() {
return $this->color;
}
# Methods of Cat class
function info(){
return $this->name." cat has ".$this->color." color";
}
function sleep(){
return $this->name." cat takes a nap.";
}
}
?>
Từ khóa $this
giúp tham chiếu đến đối tượng (object) hiện tại của lớp (class). Từ khóa $this
chỉ được sử dụng trong method của lớp.
3. Tạo đối tượng (object) trong PHP
Chúng ta có thể tạo nhiều đối tượng từ một lớp. Mỗi đối tượng có tất cả các thuộc tính và phương thức được định nghĩa trong lớp nhưng chúng sẽ có các giá trị thuộc tính khác nhau.
Các đối tượng của một lớp được tạo bằng cách sử dụng từ khóa new.
<?php
class Cat {
# Properties of Cat class
public $name;
public $color;
# getter and setter methods
function set_name($name) {
$this->name = $name;
}
function get_name() {
return $this->name;
}
function set_color($color) {
$this->color = $color;
}
function get_color() {
return $this->color;
}
# Methods of Cat class
function info(){
return $this->name." cat has ".$this->color." color";
}
function sleep(){
return $this->name." cat takes a nap.";
}
}
$tom = new Cat();
$tom->set_name("Tom");
$tom->set_color("grey and white");
$kitty = new Cat();
$kitty->set_name("Kitty");
$kitty->set_color("white and pink");
echo $tom->info();
echo "<br>";
echo $kitty->info();
?>
Kết quả
Tom cat has grey and white color
Kitty cat has white and pink color
4. Kiểm tra một object thuộc về một class trong PHP
Chúng ta có thể sử dụng từ khóa instanceof để kiểm tra xem một đối tượng có thuộc một lớp hay không.
<?php
class Cat {
# Properties of Cat class
public $name;
public $color;
# getter and setter methods
function set_name($name) {
$this->name = $name;
}
function get_name() {
return $this->name;
}
function set_color($color) {
$this->color = $color;
}
function get_color() {
return $this->color;
}
# Methods of Cat class
function info(){
return $this->name." cat has ".$this->color." color";
}
function sleep(){
return $this->name." cat takes a nap.";
}
}
$tom = new Cat();
//bool(true)
var_dump($tom instanceof Cat);
//bool(false)
var_dump($tom instanceof Dog);
?>
Trong ví dụ trên, $tom
là một object của lớp Cat
nên kết quả trả về là bool(true)
. $tom
là một object của lớp Dog
nên kết quả trả về là bool(false)
.