⊗ppOpMgROP 89 of 107 menu

คุณสมบัติแบบอ่านอย่างเดียวใน OOP ใน PHP

ลองพิจารณาคลาสที่มีคุณสมบัติทั้งหมดเป็นส่วนตัว:

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

ตอนนี้ทำให้คุณสมบัติเหล่านี้ในโลกภายนอกสามารถเข้าถึงได้เฉพาะสำหรับการอ่านเท่านั้น ก่อนหน้านี้เราเคยทำแบบนี้โดยสร้าง getter สำหรับแต่ละคุณสมบัติและไม่สร้าง setter

ตอนนี้เพื่อแก้ไขปัญหานี้ เราจะใช้เมธอดเวทมนตร์ __get เราจะคืนค่าในนั้นของคุณสมบัติที่ร้องขอ วิธีการทำ: ชื่อของคุณสมบัติที่ร้องขอจะเข้าสู่พารามิเตอร์ของเมธอด __get ในกรณีของเราคือ $property

นั่นหมายความว่าเราสามารถอ่านคุณสมบัติที่มีชื่อเก็บอยู่ในตัวแปรได้ดังนี้: $this->$property (ชื่อคุณสมบัติจะเป็นตัวแปร นั่นคือมีเครื่องหมายดอลลาร์อยู่ข้างหน้า เราเคยเรียนเรื่องนี้ในบทเรียนก่อนหน้านี้)

ลองสร้างเมธอด __get ที่อธิบายไว้:

<?php class Test { private $prop1 = 1; private $prop2 = 2; public function __get($property) { return $this->$property; } } ?>

มาใช้มันเพื่ออ่านคุณสมบัติ:

<?php $test = new Test; echo $test->prop1; // จะแสดง 1 echo $test->prop2; // จะแสดง 2 ?>

ความพยายามในการเขียนบางสิ่งลงในคุณสมบัติจะทำให้เกิดข้อผิดพลาด:

<?php $test = new Test; $test->prop1 = 2; // จะทำให้เกิดข้อผิดพลาด ?>

นี่คือสิ่งที่เราต้องการ: คุณสมบัติสามารถอ่านได้ แต่ไม่สามารถเขียนได้

ความพยายามในการอ่านคุณสมบัติที่ไม่มีอยู่จะทำให้เกิดข้อผิดพลาด:

<?php $test = new Test; echo $test->prop3; // จะทำให้เกิดข้อผิดพลาด ?>

โปรดสังเกตความแตกต่างต่อไปนี้ด้วย: เมื่อเราสร้างคุณสมบัติสำหรับอ่านอย่างเดียวด้วยวิธีเก่า เพื่อที่จะอ่านคุณสมบัติ เราใช้เมธอด getter

ในวิธีใหม่ เราจะเข้าถึงคุณสมบัติเหล่านั้นโดยตรง ราวกับว่าพวกมันเป็นสาธารณะ แต่เราจะไม่สามารถเขียนลงในพวกมันได้ ราวกับว่าพวกมันเป็นส่วนตัว

ให้คลาส User นี้ ที่คุณสมบัติของมันสามารถเข้าถึงได้สำหรับการอ่านเท่านั้นโดยใช้ getters:

<?php class User { private $name; private $age; public function __construct($name, $age) { $this->name = $name; $this->age = $age; } public function getName() { return $this->name; } public function getAge() { return $this->age; } } ?>

ปรับปรุงโค้ดของคลาสนี้ใหม่เพื่อให้ใช้เมธอดเวทมนตร์ __get แทน getters

ไทย
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ʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ