Home >Backend Development >PHP Tutorial >PHP object-oriented access control public, private, protected detailed explanation_PHP tutorial
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 从上面的例子中,我们可以看出,
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.
?> |