⊗ppOpMgSP 91 of 107 menu

Ghi thuộc tính thông qua ma thuật trong OOP PHP

Phương thức ma thuật __set được gọi khi có nỗ lực thay đổi giá trị của một thuộc tính không tồn tại hoặc bị ẩn. Nó nhận tên thuộc tính và giá trị được cố gắng gán cho nó làm tham số.

Hãy xem một ví dụ thực tế. Giả sử chúng ta có lớp Test sau:

<?php class Test { private $prop1; private $prop2; } ?>

Hãy tạo phương thức ma thuật __set trong lớp này, phương thức này sử dụng hàm var_dump để xuất ra tên thuộc tính mà đã được truy cập và giá trị đang cố gắng thiết lập cho thuộc tính đó:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { var_dump($property . ' ' .$value); } } ?>

Hãy kiểm tra hoạt động của lớp chúng ta:

<?php $test = new Test; $test->prop = 'value'; // var_dump của phương thức __set sẽ xuất ra 'prop value' ?>

Bây giờ hãy thiết lập giá trị cho thuộc tính có tên được lưu trong biến $property:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { $this->$property = $value; // thiết lập giá trị } } ?>

Bây giờ chúng ta có thể ghi giá trị vào các thuộc tính private từ bên ngoài lớp:

<?php $test = new Test; $test->prop1 = 1; // ghi 1 $test->prop2 = 2; // ghi 2 ?>

Chúng ta có thể ghi, tuy nhiên, để kiểm tra xem có ghi được gì vào đó không - thì không thể, vì các thuộc tính là private.

Có thể tạo getter cho các thuộc tính này hoặc đơn giản sử dụng phương thức ma thuật __get. Hãy sử dụng phương án thứ hai:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { $this->$property = $value; } // Getter ma thuật cho thuộc tính: public function __get($property) { return $this->$property; } } ?>

Bây giờ chúng ta có thể kiểm tra hoạt động của lớp chúng ta. Hãy kiểm tra:

<?php $test = new Test; $test->prop1 = 1; // ghi 1 $test->prop2 = 2; // ghi 2 echo $test->prop1; // sẽ xuất ra 1 echo $test->prop2; // sẽ xuất ra 2 ?>

Trên thực tế, dĩ nhiên, không nên cho phép bất kỳ ai cũng có thể ghi vào các thuộc tính private, nếu không sẽ mất đi ý nghĩa của các thuộc tính private này (tốt hơn là làm chúng public và xong).

Vì vậy, phương thức này chỉ nên được áp dụng khi thực sự cần thiết. Trong các bài học tiếp theo, chúng ta sẽ xem xét thêm các ví dụ về ứng dụng thành công của nó.

Tiếng Việt
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối