Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> PHP

Nạp chồng (Overloading) trong PHP

Giới thiệu

Khái niệm nạp chồng (overloading) trong PHP khác so với các ngôn ngữ hướng đối tượng khác như C++ hoặc Java. Ở các ngôn ngữ đó, nạp chồng nghĩa là khả năng có nhiều phương thức cùng tên nhưng với tham số và/hoặc kiểu trả về khác nhau. Trong PHP, nạp chồng đề cập đến tính năng tạo động thuộc tính và phương thức. Các phương thức ma thuật (magic methods - tên phương thức bắt đầu bằng dấu gạch dưới kép) được sử dụng để thiết lập các thuộc tính và phương thức động.

Nạp chồng thuộc tính

Các phương thức ma thuật sau được dùng cho nạp chồng thuộc tính:

Cú pháp

public __set(string $name, mixed $value): void
public __get(string $name): mixed
public __isset(string $name): bool
public __unset(string $name): void
  • __set() được gọi khi ghi dữ liệu vào thuộc tính không thể truy cập (protected, private hoặc không tồn tại).
  • __get() đọc dữ liệu từ thuộc tính không thể truy cập.
  • __isset() được gọi khi sử dụng isset() hoặc empty() trên thuộc tính không thể truy cập.
  • __unset() được gọi khi unset() được sử dụng trên thuộc tính không thể truy cập.

Ví dụ

Trong đoạn mã sau, một thuộc tính động tên myprop được thiết lập, truy xuất và hủy:

<?php
class myclass {
    public function __set($name, $value) {
        echo "setting $name property to $value \n";
        $this->$name = $value;
    }
    public function __get($name) {
        echo "value of $name property is ";
        return $this->$name;
    }
    public function __isset($name) {
        return isset($this->$name);
    }
    public function __unset($name) {
        unset($this->$name);
    }
}

$obj = new myclass();
$obj->myprop = "test";
echo $obj->myprop . "\n";
var_dump(isset($obj->myprop));
unset($obj->myprop);
var_dump(isset($obj->myprop));
?>

Kết quả

setting myprop property to test
value of myprop property is test
bool(true)
bool(false)

Nạp chồng phương thức

Hai phương thức ma thuật dùng để tạo động phương thức là __call() và __callStatic():

public __call(string $name, array $arguments): mixed
public static __callStatic(string $name, array $arguments): mixed
  • __call() được kích hoạt khi gọi phương thức không thể truy cập trong ngữ cảnh đối tượng.
  • __callStatic() được kích hoạt khi gọi phương thức không thể truy cập trong ngữ cảnh tĩnh (static).

Ví dụ nạp chồng phương thức

<?php
class myclass {
    public function __call($name, $args) {
        // Lưu ý: giá trị $name phân biệt chữ hoa/thường
        echo "Calling object method $name with " . implode(" ", $args) . "\n";
    }
    public static function __callStatic($name, $args) {
        echo "Calling static method $name with " . implode(" ", $args) . "\n";
    }
}

$obj = new myclass();
$obj->mymethod("Hello World!");
myclass::mymethod("Hello World!");
?>

Kết quả

Calling object method mymethod with Hello World!
Calling static method mymethod with Hello World!