PHP OOP - Lớp và Đối tượng
Một lớp là một khuôn 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ể xác định 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ẻ (apple, banana, 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ị khác nhau cho các thuộc tính.
Xác định một lớp
Một lớp được định nghĩa bằng cách sử dụng class
từ khóa, 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 pháp của nó đều đi vào bên trong niềng răng:
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
Lớp học không là gì nếu không có đồ vật! 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 new
từ khóa.
Trong ví dụ dưới đây, $ apple và $ banana là các thể hiện của lớp Fruit:
Thí 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();
?>
Trong ví dụ dưới đây, chúng tôi thêm hai phương thức nữa vào lớp Fruit, để thiết lập và nhận thuộc tính $ color:
Thí 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();
?>
PHP - $ this Keyword
Từ khóa $ this đề cập đến đối tượng hiện tại và chỉ có sẵn bên trong các phương thức.
Hãy xem ví dụ sau:
Thí dụ
<?php
class Fruit {
public $name;
}
$apple = new Fruit();
?>
Vì 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):
Thí dụ
<?php
class Fruit {
public $name;
function set_name($name) {
$this->name = $name;
}
}
$apple = new Fruit();
$apple->set_name("Apple");
echo $apple->name;
?>
2. Bên ngoài lớp (bằng cách thay đổi trực tiếp giá trị thuộc tính):
Thí dụ
<?php
class Fruit {
public $name;
}
$apple = new Fruit();
$apple->name = "Apple";
echo $apple->name;
?>
PHP - instanceof
Bạn có thể sử dụng instanceof
từ khóa để kiểm tra xem một đối tượng có thuộc một lớp cụ thể hay không:
Thí dụ
<?php
$apple = new Fruit();
var_dump($apple instanceof
Fruit);
?>