Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

โหมดการมองเห็น PHP


แนะนำตัว

ใน 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