La différence entre soi, parent et ceci dans la classe php et une introduction aux exemples

高洛峰
Libérer: 2023-03-05 08:20:02
original
1677 Les gens l'ont consulté

1, this

1. Pour utiliser ceci, vous devez avoir un contexte d'objet, sinon il signalera une erreur, Erreur fatale : Utiliser $this lorsqu'il n'est pas dans un contexte d'objet.
2. cela peut appeler des méthodes et des attributs dans cette classe, ou peut appeler des méthodes et des attributs réglables dans la classe parent

2 self

1 self peut accéder à ces propriétés statiques et. les méthodes statiques d'une classe peuvent accéder aux propriétés statiques et aux méthodes statiques de la classe parent.
2. Lorsque vous utilisez self, vous n'avez pas besoin de l'instancier


3. parent

1.
2. Lorsque vous utilisez parent, vous n'avez pas besoin d'instancier

<?php
class test{
 public $public;
 private $private;
 protected $protected;
 static $instance;
 static $good = &#39;tankzhang <br>&#39;;
 public $tank = &#39;zhangying <br>&#39;;
 public  function __construct(){
 $this->public    = &#39;public     <br>&#39;;
 $this->private   = &#39;private    <br>&#39;;
 $this->protected = &#39;protected  <br>&#39;;
 }
 public 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;
 }
 static function sta_function(){
 echo "you request static function<br>";
 }
}
class test1 extends test{
 static $love = "tank <br>";
 private $aaaaaaa = "ying <br>";
 public function __construct(){
 parent::tank();
 parent::__construct();
 }
 public function tank(){
 echo $this->public;
 echo $this->protected;
 echo $this->aaaaaaa;
 $this->pro_function();
 }
 public  function test1_function(){
 echo self::$love;
 echo self::$good;
 echo parent::$good;
 echo parent::$tank;   //Fatal error: Access to undeclared static property: test::$tank
 echo self::$tank;     //Fatal error: Access to undeclared static property: test::$tank
 }
 static function extends_function(){
 parent::sta_function();
 self::pro_function();
 echo "you request extends_private function<br>";
 }
}
error_reporting(E_ALL);
$test = new test1();
$test->tank();            //子类和父类有相同名字的属性和方法,实例化子类时,会调用子类中的方法。
test1::test1_function();
test1::extends_function();  //执行一部分后,报Fatal error: Using $this when not in object context in D:\xampp\htdocs\mytest\www4.php on line 32
?>
Copier après la connexion

1 Lorsque nous appelons la méthode $test->tank(); . , cet objet peut appeler des méthodes et des attributs dans cette classe et la classe parent,

2, test1::test1_function(); Lorsque nous utilisons des méthodes statiques pour appeler des méthodes non statiques, un avertissement s'affiche, La méthode non statique test::test1_function() ne doit pas être appelée de manière statique. On peut voir que self peut appeler les propriétés statiques de cette classe et de la classe parent, et parent peut appeler les propriétés statiques de la classe parent. appellera les propriétés non statiques. Signaler une erreur. Il y a des commentaires

3 dans le code, test1::extends_function(); cette étape signalera une erreur, signalant que $this est utilisé dans un non-objet. Pourquoi ? test1::extends_function(); appelle simplement une méthode dans la classe et n'est pas instancié, donc il n'y a aucun objet lorsque $this est utilisé dans la classe parent, une erreur sera signalée

<.>Pour plus d'articles sur les différences entre soi, parent, et cela dans les classes et exemples PHP, veuillez faire attention au site Web PHP 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