PHP OOP - Lớp và đối tượng
Một lớp là một mẫu cho các đối tượng và một đối tượng là một thể hiện của lớp.
Trường hợp OOP
Giả sử chúng ta có một lớp tên là Fruit. Một Fruit có thể có các thuộc tính như tên, màu sắc, trọng lượng, v.v. Chúng ta có thể định nghĩa các biến như $name, $color và $weight để giữ các giá trị của các thuộc tính này.
Khi các đối tượng riêng lẻ (táo, chuối, v.v.) được tạo, chúng kế thừa tất cả các thuộc tính và hành vi từ lớp, nhưng mỗi đối tượng sẽ có các giá trị thuộc tính khác nhau.
Xác định một lớp
Một lớp được xác định bằng cách sử dụng từ khóa class
, theo sau là tên của lớp và một cặp dấu ngoặc nhọn ({}). Tất cả các thuộc tính và phương thức của nó đều nằm trong dấu ngoặc nhọn:
Cú pháp
<?php
class Fruit {
// code goes here...
}
?>
Dưới đây chúng ta khai báo một lớp có tên Fruit bao gồm hai thuộc tính ($name và $color) và hai phương thức set_name() và get_name() để thiết lập và lấy thuộc tính $name:
<?php
class Fruit {
// Properties
public
$name;
public $color;
// Methods
function
set_name($name) {
$this->name = $name;
}
function get_name() {
return $this->name;
}
}
?>
Lưu ý: Trong một lớp, các biến được gọi là thuộc tính và hàm được gọi là phương thức!
Xác định đối tượng
Các lớp học không là gì nếu không có đối tượng! 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 từ khóa new
.
Trong ví dụ bên dưới, $apple và $banana là các thể hiện của lớp Fruit:
Ví dụ
<?php
class Fruit {
// Properties
public
$name;
public $color;
// Methods
function
set_name($name) {
$this->name = $name;
}
function get_name() {
return $this->name;
}
}
$apple = new Fruit();
$banana = new Fruit();
$apple->set_name('Apple');
$banana->set_name('Banana');
echo $apple->get_name();
echo "<br>";
echo $banana->get_name();
?>
Hãy tự mình thử »Trong ví dụ bên dưới, chúng tôi thêm hai phương thức nữa vào lớp Fruit, để thiết lập và lấy thuộc tính $color:
Ví dụ
<?php
class Fruit {
// Properties
public $name;
public $color;
// 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;
}
}
$apple = new Fruit();
$apple->set_name('Apple');
$apple->set_color('Red');
echo "Name: " . $apple->get_name();
echo "<br>";
echo "Color: " . $apple->get_color();
?>
Hãy tự mình thử » PHP - Từ khóa $this
Từ khóa $this đề cập đến đối tượng hiện tại và chỉ khả dụng bên trong các phương thức.
Hãy xem ví dụ sau:
Ví dụ
<?php
class Fruit {
public $name;
}
$apple = new Fruit();
?>
Vậy chúng ta có thể thay đổi giá trị của thuộc tính $name ở đâu? Có hai cách:
1. Bên trong lớp (bằng cách thêm phương thức set_name() và sử dụng $this):
Ví dụ
<?php
class Fruit {
public $name;
function set_name($name) {
$this->name = $name;
}
}
$apple = new Fruit();
$apple->set_name("Apple");
echo $apple->name;
?>
Hãy tự mình thử »2. Bên ngoài lớp (bằng cách thay đổi trực tiếp giá trị thuộc tính):
Ví dụ
<?php
class Fruit {
public $name;
}
$apple = new Fruit();
$apple->name = "Apple";
echo $apple->name;
?>
Hãy tự mình thử »PHP - ví dụ
Bạn 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 cụ thể hay không: