Lấy thuộc tính thông qua ma thuật trong OOP PHP
Phương thức ma thuật tiếp theo mà chúng ta sẽ
phân tích cùng nhau được gọi là __get. Phương thức
này được kích hoạt khi cố gắng đọc giá trị
của một thuộc tính private hoặc protected.
Nếu triển khai phương thức __get trong một
lớp nào đó, thì tất cả các truy cập vào các thuộc tính không tồn tại
hoặc bị ẩn sẽ được xử lý bởi
phương thức này.
Đồng thời, PHP sẽ tự động truyền tên của thuộc tính được yêu cầu vào tham số đầu tiên của phương thức này, và giá trị được trả về bởi phương thức này sẽ được coi là giá trị của thuộc tính mà đã được truy cập.
Có lẽ bây giờ vẫn chưa thực sự rõ ràng cách nó
hoạt động, vì vậy hãy xem một ví dụ thực tế.
Giả sử chúng ta có lớp Test với các thuộc tính
private và public như sau:
<?php
class Test
{
public $prop1 = 1; // thuộc tính public
private $prop2 = 2; // thuộc tính private
}
?>
Hãy thêm phương thức ma thuật
__get vào lớp của chúng ta, ban đầu nó sẽ chỉ
đơn giản trả về tên của thuộc tính mà đã được
truy cập:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // chỉ cần trả về tên thuộc tính
}
}
?>
Hãy kiểm tra hoạt động của phương thức ma thuật đã tạo. Chúng ta sẽ truy cập vào ba loại thuộc tính: thuộc tính public, thuộc tính private và thuộc tính không tồn tại:
<?php
$test = new Test;
// Truy cập vào thuộc tính public:
echo $test->prop1; // sẽ hiển thị 1 - tức là giá trị của thuộc tính
// Truy cập vào thuộc tính private:
echo $test->prop2; // sẽ hiển thị 'prop2' - tên thuộc tính
// Truy cập vào thuộc tính không tồn tại:
echo $test->prop3; // sẽ hiển thị 'prop3' - tên thuộc tính
?>
Như bạn thấy, phương thức ma thuật của chúng ta phản ứng với việc truy cập vào các thuộc tính private và không tồn tại, nhưng bỏ qua việc truy cập vào các thuộc tính public - chúng hoạt động như trước đây.