Home > Backend Development > PHP Problem > What is the difference between public and private in php

What is the difference between public and private in php

青灯夜游
Release: 2023-03-13 16:52:01
Original
4508 people have browsed it

Difference: 1. If a class member is declared as public, it can be accessed from anywhere; and if a class member is declared as private, it can only be accessed by the class that defines the member. 2. Public is a public type with the greatest authority and can be called internally, instance called, etc.; private is a private type and can only be used in this class.

What is the difference between public and private in php

The operating environment of this tutorial: Windows 7 system, PHP version 7.1, DELL G3 computer

public, private and protected are called access modifiers . Just like C, PHP also has three access modifiers such as public, private and protected. The visibility of a property, method or constant can be defined by preceding the declaration with these keywords.

1. If a class member is declared public, it can be accessed from anywhere.

Public has the greatest authority and can make internal calls, instance calls, etc.

2. If a class member is declared protected, it can only be accessed within the class itself and in inheritance and parent classes.

protected is a protected type, used for calling this class and inherited classes.

3. If a class member is declared private, it can only be accessed by the class that defines the member.

private is a private type and can only be used in this class.

Example:

<?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
?>
Copy after login

From the above example, we can see:

public: Can be called inside the class and can be instantiated ization call.

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.

<?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();       //子类和父类有相同名字的属性和方法,实例化子类时,子类的中的属性和方法会盖掉父类的。
?>
Copy after login

From the above example, we can see:

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.

Recommended learning: "PHP Video Tutorial"

The above is the detailed content of What is the difference between public and private in php. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template