Maison > développement back-end > Problème PHP > Quelle est la différence entre public et privé en php

Quelle est la différence entre public et privé en php

青灯夜游
Libérer: 2023-03-13 16:52:01
original
4509 Les gens l'ont consulté

Différence : 1. Si un membre de classe est déclaré comme public, alors il est accessible de n'importe où ; et si un membre de classe est déclaré comme privé, il n'est accessible que par la classe qui définit le membre. 2. Public est un type public avec la plus grande autorité et peut être appelé en interne, une instance appelée, etc. private est un type privé et ne peut être utilisé que dans cette classe.

Quelle est la différence entre public et privé en php

L'environnement d'exploitation de ce tutoriel : système Windows 7, PHP version 7.1, ordinateur DELL G3

public, privé et protégé sont appelés modificateurs d'accès. Tout comme C++, PHP dispose également de trois modificateurs d'accès tels que public, privé et protégé. La visibilité d'une propriété, d'une méthode ou d'une constante peut être définie en faisant précéder la déclaration de ces mots-clés.

1. Si un membre de la classe est déclaré public, il est accessible de n'importe où.

Le public dispose des autorisations les plus importantes et peut passer des appels internes, des appels d'instance, etc.

2. Si un membre de classe est déclaré protégé, il n'est accessible qu'au sein de la classe elle-même et dans les classes d'héritage et parent.

protected est un type protégé, utilisé pour appeler cette classe et les classes héritées.

3. Si un membre de classe est déclaré privé, il n'est accessible que par la classe qui définit le membre.

private est un type privé et ne peut être utilisé que dans cette classe.

Exemple :

<?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
?>
Copier après la connexion

Dans l'exemple ci-dessus, nous pouvons voir que :

public : peut être appelé en interne dans une classe ou instancié.

private : peut être appelé à l'intérieur de la classe, et une erreur sera signalée lors de l'instanciation de l'appel.

protected : Il peut être appelé à l'intérieur de la classe, et une erreur sera signalée lors de l'instanciation de l'appel.

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

Dans l'exemple ci-dessus, nous pouvons voir :

public : le public en test peut être hérité.

privé : le test privé ne peut pas être hérité.

protected : protégé en test peut être hérité.

static : la statique du test peut être héritée.

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal