Computer >> Máy Tính >  >> Lập trình >> PHP

Chế độ hiển thị trong PHP

Giới thiệu

Trong PHP, có thể có kiểu dữ liệu tổng hợp do người dùng xác định bằng cách sử dụng class từ khóa. Một thể hiện mới của lớp là một đối tượng. Đặc tính của đối tượng theo định nghĩa của lớp, có thể chứa các thành viên thuộc tính, hằng số và phương thức.

Khả năng truy cập (còn gọi là khả năng hiển thị) của một thành viên lớp phụ thuộc vào từ khóa tiền tố khả năng hiển thị được đính kèm trong định nghĩa của nó. PHP có ba từ khóa hiển thị - công khai , riêng tư được bảo vệ . Một thành viên lớp được khai báo với từ khóa công khai có thể truy cập được từ anywhare. Một thành viên được bảo vệ có thể truy cập từ bên trong lớp của nó và bằng cách kế thừa lớp. Mặt khác, thành viên riêng tư chỉ có thể được truy cập bởi cùng một lớp mà nó được định nghĩa và không hiển thị với bất kỳ thứ gì bên ngoài nó.

Mức độ hiển thị thuộc tính

Thuộc tính là một thuộc tính của cá thể lớp. Nó có thể là một thuộc tính thể hiện (có giá trị khác nhau cho mỗi đối tượng) hoặc thuộc tính lớp có cùng giá trị cho mỗi đối tượng. Thuộc tính có thể thuộc bất kỳ kiểu dữ liệu PHP hợp lệ nào. Thuộc tính có khả năng hiển thị công khai theo mặc định. Nếu một thuộc tính được xác định bằng từ khóa var (hiện không được dùng nữa), thì thuộc tính đó được coi là công khai.

Ví dụ

<?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;
?>

Đầu ra

Kết quả sau cho thấy rằng các thuộc tính công cộng có thể được truy cập bên ngoài lớp, trong khi các thuộc tính riêng tư và được bảo vệ sẽ đưa ra các lỗi chưa tìm thấy

Ajay
PHP Fatal error: Uncaught Error: Cannot access private property myclass::$marks
PHP Fatal error: Uncaught Error: Cannot access protected property myclass::$age

Tuy nhiên, các thuộc tính riêng tư và được bảo vệ có thể được sử dụng bên trong hàm trong cùng một lớp

Ví dụ

<?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();
?>

Đầu ra

Điều này sẽ tạo ra kết quả sau. -

Ajay Diwan
marks=100 age=20

Khả năng hiển thị của Phương thức

Giống như các thuộc tính của lớp, các phương thức của lớp cũng có thể được gán khả năng hiển thị với các từ khóa công khai, riêng tư và được bảo vệ. Các phương thức cũng vậy, theo mặc định được coi là công khai.

Ví dụ

<?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();
?>

Đầu ra

Điều này sẽ tạo ra kết quả sau. -

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

Khả năng hiển thị của phương pháp trong tính kế thừa

Cha mẹ các phương thức lớp có thể bị ghi đè trong con định nghĩa giai cấp. Các phương thức private và protected của cha không khả dụng cho đối tượng của lớp con. Tuy nhiên, một phương thức được bảo vệ trong lớp cha có thể được sử dụng trong một phương thức lớp con

Ví dụ

<?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();
?>

Đầu ra

Điều này sẽ hiển thị kết quả sau

newclass public method
x=10 y=20 z=30
PHP Fatal error: Uncaught Error: Call to private method testclass::test() from context 'newclass'

Mức độ hiển thị không đổi

Từ PHP 7.1 trở đi, các chế độ hiển thị có thể được sử dụng với các hằng số. Hiển thị mặc định của hằng là công khai

Ví dụ

<?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";
?>

Đầu ra

Điều này sẽ hiển thị kết quả sau

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