Home >Backend Development >PHP Tutorial >Usage examples and difference analysis of public, private and protected

Usage examples and difference analysis of public, private and protected

伊谢尔伦
伊谢尔伦Original
2017-07-03 10:01:223145browse

1. The difference between public, private and protected

public: has the greatest permissions and can be called internally, instance called, etc.
protected: Protected type, used for this class and inherited class calls.
private: Private type, only used in this class.

2, Example

The code is as follows:

<?php
error_reporting
(E_ALL);
class test{
 public $public;
 private $private;
 protected $protected;
 
static
 $instance;
 public  function construct(){
 $this->public    = &#39;public     <br>&#39;;
 $this->private   = &#39;private    <br>&#39;;
 $this->protected = &#39;protected  <br>&#39;;
 }
 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<br>";
 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<br>";
 }
 private function pri_function(){
 echo "you request private function<br>";
 }
}
$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
?>

From the above example, we can see ,
public: Can be called internally in a class or instantiated.
private: Can be called inside the class, and an error will be reported when instantiating the call.
protected: It can be called inside the class, and an error will be reported when instantiating the call.

The code is as follows:

<?php
class test{
 public $public;
 private $private;
 protected $protected;
 static $instance;
 public  function construct(){
 $this->public    = &#39;public     <br>&#39;;
 $this->private   = &#39;private    <br>&#39;;
 $this->protected = &#39;protected  <br>&#39;;
 }
 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<br>";
 echo $this->public;
 }
 protected  function pro_function(){
 echo "you request protected function<br>";
 echo $this->protected;
 }
 private function pri_function(){
 echo "you request private function<br>";
 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 &#39;test1&#39;
 }
 public  function pro_extends_function(){
 echo "you request extends_protected function<br>";
 }
 public function pri_extends_function(){
 echo "you request extends_private function<br>";
 }
}
error_reporting(E_ALL);
$test = new test1();
$test -> tank();       //子类和父类有相同名字的
属性和方法
,实例化子类时,子类的中的属性和方法会盖掉父类的。
?>

From the above example, we can see that
public: public in test can be inherited.
private: Private in test cannot be inherited.
protected: protected in test can be inherited.
static: static in test can be inherited.

The above is the detailed content of Usage examples and difference analysis of public, private and protected. For more information, please follow other related articles on the PHP Chinese website!

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