Khái niệm hướng đối tượng, Class, Object trong PHP
- 14-03-2023
- Toanngo92
- 0 Comments
Mục lục
Class và Object trong PHP
Không giống như lập trình hướng thủ tục coi trọng thủ tục hoặc chức năng, Lập trình hướng đối tượng (OOP) coi trọng đối tượng. Một đối tượng không là gì ngoài dữ liệu (thuộc tính) và hàm (phương thức) được kết hợp với nhau. OOP được ưa thích hơn các ngôn ngữ lập trình truyền thống, có cấu trúc hoặc thủ tục vì những lợi thế như khả năng sử dụng lại. Các lớp và đối tượng được sử dụng để thực hiện các nguyên tắc OOP.
Khái niệm Class
Một class có thể chứa các biến (được gọi là thuộc tính), hằng số và hàm (được gọi là phương thức) được thiết kế để thực hiện một hoặc nhiều tác vụ. Trong thế giới thực, để xây dựng một ngôi nhà, một bản thiết kế được tạo ra trước tiên. Bản thiết kế chứa các kế hoạch rõ ràng và chi tiết cho ngôi nhà. Bằng cách sử dụng nó, bất kỳ số lượng ngôi nhà tương tự nào cũng có thể được xây dựng. Tương tự, một lớp (class) được định nghĩa một lần có thể được sử dụng để tạo bất kỳ số lượng đối tượng nào. Do đó, một lớp hoạt động như một kế hoạch chi tiết hoặc khuôn mẫu để tạo ra các đối tượng.
Khái niệm Objects
Các đối tượng (objects) là các bản sao hoặc thể hiện riêng lẻ của một class. Bất kỳ số lượng đối tượng nào cũng có thể được tạo cho một lớp. Mỗi đối tượng được tạo sẽ có cùng loại thuộc tính và hành vi như của một class. Tuy nhiên, mỗi đối tượng có thể có các giá trị khác nhau trong các biến.
Ví dụ: một khi bản thiết kế được tạo, có thể tạo bất kỳ số lượng bản sao nào. Mặc dù bản thiết kế giống nhau cho mỗi ngôi nhà, nhưng có thể có màu sơn, thiết kế nội thất khác nhau, v.v.
Thuật ngữ | Mô tả |
Member Properties | Các biến được khai báo bên trong một lớp được gọi là thuộc tính thành viên hoặc biến thành viên. Đây cũng được gọi là thành viên dữ liệu. Các biến thành viên chỉ có thể được truy cập thông qua các hàm thành viên và không trực tiếp bên ngoài lớp. Bên trong các đối tượng, các biến này được gọi là các thuộc tính. |
Member Methods | Hàm hoặc phương thức được định nghĩa bên trong class được gọi là member functions hay methods (hàm thành viên hoặc phương thức thành viên) Các phương thức này có thể truy cập data members của class |
Inheritance | Thông qua kế thừa, một lớp có thể sử dụng lại các thuộc tính của một lớp đã được định nghĩa. Lớp sử dụng lại các thuộc tính được gọi là sub class hoặc derived class hoặc child class. Class mà các thuộc tính được sử dụng lại được gọi là super class hoặc base class hoặc parent class. Một derived class (lớp dẫn xuất có) thể sử dụng lại tất cả hoặc chỉ những thuộc tính được yêu cầu từ parent class (lớp cha). |
constructor | Đây là một loại hàm đặc biệt, được gọi tự động tại thời điểm tạo đối tượng. |
destructor | Đây là một loại chức năng đặc biệt, được sử dụng để xóa bộ nhớ bị chiếm giữ bởi một đối tượng. Nó được gọi tự động khi một đối tượng bị xóa hoặc nằm ngoài phạm vi. |
Định nghĩa một class trong PHP
Một dass được tạo bằng cách sử dụng từ khóa lớp, theo sau là tên lớp và một cặp dấu ngoặc nhọn “{}”. Thuộc tính và phương thức của lớp được đưa ra bên trong dấu ngoặc. Một lớp có thể có bất kỳ số lượng thuộc tính và phương thức nào.
<?php
class Car {
// Properties (also known as attributes or member variables)
public $make;
public $model;
public $year;
public function start() {
echo "The car is starting.";
}
public function stop() {
echo "The car is stopping.";
}
}
Tạo đối tượng trong PHP
Khi một lớp được xác định, bất kỳ số lượng đối tượng nào cũng có thể được tạo cho loại lớp. Để tạo các đối tượng, nên sử dụng toán tử new.
Ví dụ:
$tiger = new Animals;
$lion = new Animals;
$bird = new Animals;
Ở đây, người dùng đã tạo ba đối tượng cho class Animals và các đối tượng này không phụ thuộc vào nhau. Ngoài ra, các đối tượng này sẽ tồn tại ở các vị trí vùng nhớ riêng biệt. Lưu ý rằng ở đây dấu ngoặc đơn sau tên lớp được bỏ qua. Điều này được cho phép vì chúng là không bắt buộc.
Từ khóa $this
$this là một từ khóa dành riêng (còn được gọi là biến giả) được sử dụng để truy cập đối tượng hiện tại. Pseudo-types là những từ khóa được sử dụng trong PHP để chỉ định các loại hoặc giá trị mà một đối số có thể có.
Từ khóa $this chỉ khả dụng bên trong một phương thức và đề cập đến đối tượng của phương thức hiện tại.
Ví dụ:
<?php
class Car {
// Properties (also known as attributes or member variables)
public $make;
public $model;
public $year;
public function __construct($make, $model, $year) {
$this->make = $make;
$this->model = $model;
$this->year = $year;
}
public function __toString() {
return $this->make . " " . $this->model . " " . $this->year;
}
// Methods (also knows as functions or member methods)
// getter and setter
public function getYear(){
return $this->year;
}
public function setYear($year){
$this->year = $year;
}
public function start() {
echo "The car is starting.";
}
public function stop() {
echo "The car is stopping.";
}
}
Vài cách để cập nhật thuộc tính đối tượng:
Bên ngoài class:
Sau khi khởi tạo đối tượng sử dụng phép gán để gán thuộc tính cho đối tượng thành giá trị mới. Để truy vấn thuộc tính của đối tượng, sử dụng ký hiệu “->”
Ví dụ:
$car = new Car("Toyota", "Corolla", 2015);
$car->year = 2018;
echo $car; // Output: Toyota Corolla 2018
Trong ví dụ này, chúng ta tạo một đối tượng Car mới với nhãn hiệu là “Toyota”, model “Corolla” và năm “2015” bằng cách sử dụng hàm tạo của lớp __construct(). Sau đó, chúng ta đặt thuộc tính năm thành “2018” bằng cách gán trực tiếp một giá trị mới cho thuộc tính đó bằng cách sử dụng ký hiệu mũi tên (->). Để làm được việc này, thuộc tính bên trong class cần được để ở chế độ public. Cuối cùng, chúng ta hiển thị thông tin chi tiết của chiếc xe bằng cách sử dụng phương thức __toString() đã được định nghĩa trong lớp Car. Đầu ra của mã sẽ là “Toyota Corolla 2018”.
Bên trong class:
Sau khi khởi tạo đối tượng, sử dụng phương thức để cập nhật thuộc tính của đối tượng thông qua từ khóa $this khi định nghĩa bên trong class
Ví dụ:
$myCar = new Car("Toyota", "Corolla", 2010);
$myCar->setYear(2015);
// Now the year of $myCar is set to 2015
Bằng cách sử dụng phương thức setYear(), chúng ta có thể đảm bảo rằng giá trị được gán cho $year là hợp lệ và nằm trong phạm vi cho phép (trong trường hợp này là bất kỳ số nguyên nào). Ngoài ra, bằng cách giữ thuộc tính ở chế độ public, chúng ta có thể thay đổi giá trị của năm từ bên ngoài lớp Xe hơi.
Từ khóa instanceof
PHP sử dụng từ khóa instanceof để kiểm tra xem một đối tượng có thuộc về một lớp cụ thể hay không.
Ví dụ:
$car = new Car("Toyota", "Corolla", 2015);
var_dump($car instanceof(Car));
//output: true
Constructor và Destructor
Sau khi các đối tượng được khai báo, nên khởi tạo từng thành viên. Ngoài ra, khi các đối tượng vượt quá phạm vi, bộ nhớ sẽ bị xóa. Để thực hiện các thao tác này, các phương thức đặc biệt được gọi là hàm tạo và hàm hủy được sử dụng. Sau đây là mục đích của chúng:
- Constructor: là các phương thức thành viên đặc biệt được gọi tự động khi một đối tượng được tạo.
- Destructor: là các phương thức thành viên đặc biệt được gọi tự động khi một đối tượng bị hủy hoặc một đối tượng nằm ngoài phạm vi.
Phương thức Constructor
Một hàm constructor (khởi tạo) thường được khai báo công khai và được đặt tên là construct. Phương thức này phải bắt đầu bằng hai dấu gạch dưới (__).
Ví dụ:
class Car {
public $make;
public $model;
public function __construct($make, $model) {
$this->make = $make;
$this->model = $model;
}
}
$car = new Car("Toyota", "Corolla");
echo $car->make; // outputs "Toyota"
echo $car->model; // outputs "Corolla"
Phương thức Destructor
Một hàm destructor được gọi khi một đối tượng bị xóa hoặc đã ra khỏi phạm vi. Như với hàm constructor, hàm hủy cũng phải bắt đầu bằng hai dấu gạch dưới (__). Nếu một đối tượng chứa phương thức destructor(), nó sẽ được PHP tự động gọi ở cuối tập lệnh.
<?php
class MyClass {
public function __construct() {
echo "Constructor called. <br>";
}
public function __destruct() {
echo "Destructor called. <br>";
}
}
$obj = new MyClass();
unset($obj); // Destroy the object
Một số Magic Method trong PHP
PHP có cung cấp khái niệm magic method (phương thức ma thuật) là các phương thức đặc biệt ghi đè hành động mặc định của PHP khi một số hành động nhất định được thực hiện trên một đối tượng. Tất cả các tên phương thức bắt đầu bằng __ được đặt trước bởi PHP. Do đó, không nên sử dụng các tên phương thức như vậy trừ khi ghi đè hành vi của PHP.
Các magic method đó bao gồm __construct() và __destruct() vừa được giới thiệu phía trên.
Xem thêm: https://www.php.net/manual/en/language.oop5.magic.php