การเข้าถึงคุณสมบัติผ่านเวทมนตร์ใน OOP ใน PHP
เมธอดเวทมนตร์ถัดไปที่เราจะวิเคราะห์ร่วมกัน
เรียกว่า __get
เมธอดนี้จะทำงานเมื่อพยายามอ่านค่า
ของคุณสมบัติแบบ private หรือ protected
หากนำเมธอด __get ไป implement ในคลาสใดๆ
การอ้างอิงถึงคุณสมบัติที่ไม่มีอยู่
หรือคุณสมบัติที่ถูกซ่อนไว้ทั้งหมดจะถูกประมวลผล
โดยเมธอดนี้
ในขณะที่ PHP จะส่งชื่อของคุณสมบัติที่ถูกขอ ไปยังพารามิเตอร์แรกของเมธอดนี้โดยอัตโนมัติ และค่าที่ส่งคืนโดยเมธอดนี้ จะถูกตีความว่าเป็นค่าของคุณสมบัติ ที่ถูกอ้างอิงถึง
คงยังไม่ค่อยเข้าใจนักว่ามันทำงานอย่างไร
ดังนั้นมาดูตัวอย่างเชิงปฏิบัติกัน
สมมติว่าเรามีคลาส Test แบบนี้
ที่มีคุณสมบัติแบบ private และ public:
<?php
class Test
{
public $prop1 = 1; // คุณสมบัติสาธารณะ
private $prop2 = 2; // คุณสมบัติส่วนตัว
}
?>
ลองเพิ่มเมธอดเวทมนตร์
__get ลงในคลาสของเรา
ซึ่งเริ่มแรกจะเพียงแค่
ส่งคืนชื่อของคุณสมบัติที่ถูกอ้างอิงถึง:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // แค่ส่งคืนชื่อคุณสมบัติ
}
}
?>
มาทดสอบการทำงานของเมธอดเวทมนตร์ที่สร้างขึ้น ลองอ้างอิงถึงคุณสมบัติสามประเภท: ถึง คุณสมบัติสาธารณะ ถึงคุณสมบัติส่วนตัว และ ถึงคุณสมบัติที่ไม่มีอยู่:
<?php
$test = new Test;
// อ้างอิงถึงคุณสมบัติสาธารณะ:
echo $test->prop1; // จะแสดง 1 - ซึ่งคือค่าของคุณสมบัติ
// อ้างอิงถึงคุณสมบัติส่วนตัว:
echo $test->prop2; // จะแสดง 'prop2' - ชื่อคุณสมบัติ
// อ้างอิงถึงคุณสมบัติที่ไม่มีอยู่:
echo $test->prop3; // จะแสดง 'prop3' - ชื่อคุณสมบัติ
?>
อย่างที่คุณเห็น เมธอดเวทมนตร์ของเราตอบสนอง ต่อการอ้างอิงถึงคุณสมบัติส่วนตัวและคุณสมบัติที่ไม่มีอยู่ แต่ไม่สนใจการอ้างอิงถึงคุณสมบัติสาธารณะ - พวกมันทำงานเหมือนเดิม