แนะนำตัว
ใน PHP เป็นไปได้ที่จะมีประเภทข้อมูล compund ที่ผู้ใช้กำหนดโดยใช้ คลาส คำสำคัญ. อินสแตนซ์ใหม่ของคลาสเป็นวัตถุ ลักษณะของวัตถุเป็นไปตามคำจำกัดความของคลาส ซึ่งอาจประกอบด้วยคุณสมบัติ ค่าคงที่ และสมาชิกเมธอด
การช่วยสำหรับการเข้าถึง (เรียกอีกอย่างว่าการมองเห็น) ของสมาชิกคลาสขึ้นอยู่กับคำสำคัญนำหน้าการมองเห็นที่แนบมาในคำจำกัดความ PHP มีคีย์เวิร์ดการมองเห็นสามคำ - สาธารณะ , ส่วนตัว และ ได้รับการปกป้อง . สมาชิกคลาสที่ประกาศด้วยคีย์เวิร์ดสาธารณะสามารถเข้าถึงได้จากทุกที่ สมาชิกที่ได้รับการคุ้มครองสามารถเข้าถึงได้จากภายในคลาสและโดยการสืบทอดคลาส ในทางกลับกัน สมาชิกส่วนตัวสามารถเข้าถึงได้โดยคลาสเดียวกันกับที่มีการกำหนดไว้และไม่ปรากฏแก่สิ่งใดภายนอก
การมองเห็นทรัพย์สิน
คุณสมบัติเป็นแอตทริบิวต์ของอินสแตนซ์ของคลาส อาจเป็นคุณสมบัติของอินสแตนซ์ (มีค่าต่างกันสำหรับแต่ละอ็อบเจ็กต์) หรือคุณสมบัติคลาสที่มีค่าเท่ากันสำหรับแต่ละอ็อบเจ็กต์ คุณสมบัติอาจเป็นประเภทข้อมูล PHP ที่ถูกต้อง คุณสมบัติมีการเปิดเผยต่อสาธารณะโดยค่าเริ่มต้น หากคุณสมบัติถูกกำหนดโดยใช้ var คำหลัก (ซึ่งเลิกใช้แล้วในขณะนี้) จะถือว่าเป็นสาธารณะ
ตัวอย่าง
<?php class myclass{ public $fname="Ajay"; var $lname; //treated as public private $marks=100; protected $age=20; } $obj=new myclass(); echo "$obj->fname\n"; $obj->lname="Diwan"; echo "$obj->marks\n"; $obj->age=21; ?>
ผลลัพธ์
ผลลัพธ์ต่อไปนี้แสดงว่าคุณสมบัติสาธารณะสามารถเข้าถึงได้ภายนอกคลาส ในขณะที่คุณสมบัติส่วนตัวและคุณสมบัติที่ได้รับการป้องกันจะทำให้เกิดข้อผิดพลาดที่ไม่ถูกตรวจจับ
Ajay PHP Fatal error: Uncaught Error: Cannot access private property myclass::$marks PHP Fatal error: Uncaught Error: Cannot access protected property myclass::$age
อย่างไรก็ตาม สามารถใช้คุณสมบัติส่วนตัวและป้องกันภายในฟังก์ชันในคลาสเดียวกันได้
ตัวอย่าง
<?php class myclass{ public $fname="Ajay"; var $lname; private $marks=100; protected $age=20; function displaydata(){ $this->lname="Diwan"; echo "$this->fname $this->lname\n"; echo "marks=$this->marks age=$this->age"; } } $obj=new myclass(); $obj->displaydata(); ?>
ผลลัพธ์
ซึ่งจะให้ผลลัพธ์ตามมา −
Ajay Diwan marks=100 age=20
วิธีการมองเห็น
เช่นเดียวกับคุณสมบัติของคลาส เมธอดของคลาสยังสามารถกำหนดการมองเห็นด้วยคีย์เวิร์ดสาธารณะ ไพรเวต และคีย์เวิร์ดที่ได้รับการป้องกัน วิธีการต่างๆ เช่นกัน โดยค่าเริ่มต้นจะถือเป็นแบบสาธารณะ
ตัวอย่าง
<?php class myclass{ public $fname="Ajay"; var $lname; private $marks=100; protected $age=20; public function setname(){ $this->fname="Anil"; $this->lname="Dave"; echo "name changed\n"; } private function setmarks(){ $this->marks=90; } protected function setage(){ $this->age=21; } function setdata(){ $this->setname(); $this->setmarks(); $this->setage(); } function displaydata(){ $this->lname="Diwan"; echo "$this->fname $this->lname\n"; echo "marks=$this->marks age=$this->age"; } } $obj=new myclass(); $obj->setname();//works $obj->setmarks();//error $obj->setage();/error $obj->setdata(); //private and protected methods called withing public method $obj->displaydata(); ?>
ผลลัพธ์
ซึ่งจะให้ผลลัพธ์ตามมา −
name changed PHP Fatal error: Uncaught Error: Call to private method myclass::setmarks() from context '' PHP Fatal error: Uncaught Error: Call to protected method myclass::setage() from context '' Anil Dave marks=90 age=21
วิธีการมองเห็นในการสืบทอด
ผู้ปกครอง วิธีการเรียนสามารถแทนที่ได้ใน ลูก คำจำกัดความของคลาส วิธีการส่วนตัวและการป้องกันของพาเรนต์ไม่สามารถใช้ได้สำหรับอ็อบเจ็กต์ของคลาสลูก เมธอดที่ได้รับการปกป้องในพาเรนต์สามารถใช้ในเมธอดคลาสลูกได้
ตัวอย่าง
<?php class testclass{ public $x=10; private $y=20; protected $z=30; private function test(){ echo "testclass private method\n"; } public function test1(){ echo "testclass public method\n"; } protected function test2(){ echo "testclass protected method\n"; } function test3(){ echo "x=$this->x y=$this->y z=$this->z\n"; } } class newclass extends testclass{ function test1(){ echo "newclass public method\n"; } public function test4(){ $this->test(); $this->test1(); $this->test2(); } } $obj=new newclass(); echo $obj->test1(); echo $obj->test3(); echo $obj->test4(); ?>
ผลลัพธ์
ซึ่งจะแสดงผลดังต่อไปนี้
newclass public method x=10 y=20 z=30 PHP Fatal error: Uncaught Error: Call to private method testclass::test() from context 'newclass'
การมองเห็นคงที่
ตั้งแต่ PHP 7.1 เป็นต้นไป โหมดการมองเห็นสามารถใช้กับค่าคงที่ได้ การมองเห็นค่าคงที่เริ่มต้นเป็นแบบสาธารณะ
ตัวอย่าง
<?php class testclass{ public const X=10; private const Y=20; protected const Z=30; function showconst(){ echo "x=" . self::X ; echo "y=" . self::Y; echo "z=" . self::Z ; } } $obj=new testclass(); $obj->showconst(); echo testclass::Y . "\n"; echo testclass::Z . "\n"; ?>
ผลลัพธ์
ซึ่งจะแสดงผลดังต่อไปนี้
x=10y=20z=30 PHP Fatal error: Uncaught Error: Cannot access private const testclass::Y PHP Fatal error: Uncaught Error: Cannot access protected const testclass::Z