Home >Backend Development >PHP Tutorial >PHP object-oriented access control public, private, protected detailed explanation_PHP tutorial

PHP object-oriented access control public, private, protected detailed explanation_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 17:12:461268browse

The article uses examples to illustrate detailed descriptions of PHP5 object-oriented access control Public, private, and protected. Friends in need can refer to it.

The object-oriented mechanism has been enhanced in PHP5, and common object-oriented access control mechanisms such as public, private, and protected have been added. To understand it literally:

Public undoubtedly means public, which means that both the class itself and its external subclasses can access this property or method;

Private means private in English. It can only be accessed within the class itself - the instantiated object handle cannot access the properties and methods, nor can subclasses;

Protected A protected property or method. This property or method can only be accessed internally by the class itself or its subclasses, and the instantiated object handle cannot be accessed.

Now let’s take an example to discuss this issue.

Suppose there is a gem museum administrator Xiao Li, who divides the gems in the warehouse into three categories, rubies, sapphires, and emeralds. And the attributes are divided. The ruby ​​is marked as (public) which anyone in the country can visit, the sapphire is passed down by the administrator Xiao Li’s family (protected), and the emerald is what Xiao Li saw on the mountain (private).

Then we can think of it this way:

Rubys with the public label belong to the country - owned by all people. As long as they are legal citizens of the country, they can view and take photos.

Protected This is protected. Only members of Xiao Li's family (Xiao Li's children or grandchildren) can visit and take photos in a specific room. They are not allowed to look outside the room - so stingy!

Private This is private. Xiao Li doesn’t want other people to know, let alone take pictures, so it can only be seen by Xiao Li in Xiao Li’s room. Others, even Xiao Li’s children, cannot How to see


Example

The code is as follows Copy code

error_reporting(E_ALL);

class test{

public $public;

private $private;

protected $protected;

static $instance;

public function __construct(){

$this->public = 'public
';

$this->private = 'private
';

$this->protected = 'protected
';

}

static function tank(){

if (!isset(self::$instance[get_class()]))

{

$c = get_class();

self::$instance = new $c;

}

return self::$instance;

}

public function pub_function() {

echo "you request public function
";

echo $this->public;

echo $this->private; //private, can be called internally

echo $this->protected; //protected, can be called internally

$this->pri_function(); //private method, can be called internally

$this->pro_function(); //protected method, can be called internally

}

protected function pro_function(){

echo "you request protected function
";

}

private function pri_function(){

echo "you request private function
";

}

}

$test = test::tank();

echo $test->public;

echo $test->private; //Fatal error: Cannot access private property test::$private

echo $test->protected; //Fatal error: Cannot access protected property test::$protected

$test->pub_function();

$test->pro_function(); //Fatal error: Call to protected method test::pro_function() from context

$test->pri_function(); //Fatal error: Call to private method test::pri_function() from context

?>

public    = 'public    
';  $this->private   = 'private   
';  $this->protected = 'protected 
';  }  static function tank(){  if (!isset(self::$instance[get_class()]))  {  $c = get_class();  self::$instance = new $c;  }   return self::$instance;  }       public function pub_function() {  echo "you request public function
";  echo $this->public;  echo $this->private;        //private,内部可以调用  echo $this->protected;      //protected,内部可以调用  $this->pri_function();      //private方法,内部可以调用  $this->pro_function();      //protected方法,内部可以调用  }  protected  function pro_function(){  echo "you request protected function
";  }  private function pri_function(){  echo "you request private function
";  } }  $test = test::tank(); echo $test->public; echo $test->private;    //Fatal error: Cannot access private property test::$private echo $test->protected;  //Fatal error: Cannot access protected property test::$protected $test->pub_function(); $test->pro_function();  //Fatal error: Call to protected method test::pro_function() from context $test->pri_function();  //Fatal error: Call to private method test::pri_function() from context  ?>

从上面的例子中,我们可以看出,
public: 可以class内部调用,可以实例化调用。
private: 可以class内部调用,实例化调用报错。
protected: 可以class内部调用,实例化调用报错。

 

class test{ 

public $public; 

private $private; 

protected $protected; 

static $instance; 

 

public function __construct(){ 

$this->public = 'public 
'; 

$this->private = 'private 
'; 

$this->protected = 'protected 
'; 

protected function tank(){ //私有方法不能继承,换成public,protected 

if (!isset(self::$instance[get_class()])) 

$c = get_class(); 

self::$instance = new $c; 

return self::$instance; 

 

public function pub_function() { 

echo "you request public function
"; 

echo $this->public; 

protected function pro_function(){ 

echo "you request protected function
"; 

echo $this->protected; 

private function pri_function(){ 

echo "you request private function
"; 

echo $this->private; 

 

class test1 extends test{ 

 

public function __construct(){ 

parent::tank(); 

parent::__construct(); 

public function tank(){ 

echo $this->public; 

echo $this->private; //Notice: Undefined property: test1::$private 

echo $this->protected; 

$this->pub_function(); 

$this->pro_function(); 

$this->pri_function(); //Fatal error: Call to private method test::pri_function() from context 'test1' 

 

public function pro_extends_function(){ 

echo "you request extends_protected function
"; 

public function pri_extends_function(){ 

echo "you request extends_private function
"; 

}

error_reporting(E_ALL);

$test = new test1();

$test -> tank(); //The subclass and the parent class have properties and methods with the same names. When instantiating the subclass, the properties and methods in the subclass will overwrite those of the parent class.

?>

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/629261.htmlTechArticleThe article uses examples to illustrate the details of PHP5 object-oriented access control Public, private, and protected. Friends in need can For reference. The object-oriented mechanism is enhanced in PHP5,...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn