PHP5 est un langage qui possède la plupart des fonctionnalités d'un langage orienté objet. Il possède beaucoup plus de fonctionnalités orientées objet que PHP4, mais certains concepts sont un peu déroutants, je vais donc en parler aujourd'hui, je ne suis pas doué pour les expliquer. Veuillez me pardonner, experts. (Pour lire cet article, vous devez comprendre les connaissances orientées objet de PHP5)
Tout d'abord, comprenons les trois mots-clés ci-dessus : this, self, parent, qui est plus facile à comprendre littéralement, fait référence à cela, soi, père, haha, c'est plus amusant. , établissons d'abord quelques concepts. Où sont utilisés ces trois mots-clés ? Expliquons brièvement qu'il s'agit d'un pointeur vers l'objet actuel (utilisons le pointeur en C pour regarder ? it), et self est un pointeur vers l'objet actuel, un pointeur vers une classe, parent est un pointeur vers la classe parent. Nous utilisons fréquemment des pointeurs pour décrire ici car il n’y a pas de meilleure langue pour l’exprimer Haha, je n’ai pas bien appris le chinois. -_-#
Si vous ne le comprenez pas bien de cette façon, parlons-en à partir d'exemples réels.
(1) ce
1 <?php
2
Nom d'utilisateur de 3 classes
4 {
5 //Définir les attributs
6 $nom privé ;
7
8 //Définir le constructeur
9 fonction __construct( $nom )
10 {
11 $this->name = $name; //Ce pointeur a été utilisé ici
12}
13
14 //Destructeur
15 fonction __destruct(){}
16
17 //Fonction membre d'impression du nom d'utilisateur
18 fonction printName()
19 {
20 print($this->name); //Ce pointeur est à nouveau utilisé
vingt-et-un }
vingt-deux }
vingt-trois
24 //instancier un objet
25 $nameObject = new UserName( "heiyeluren" );
26
27 //Exécuter l'impression
28 $nameObject->printName(); //Sortie : heiyeluren
29
30 //Deuxième instanciation de l'objet
31 $nameObject2 = new UserName( "PHP5" );
32
33 //Exécuter l'impression
34 $nameObject2->printName(); //Sortie : PHP5
35 ?>
Voyons que la classe ci-dessus utilise ce pointeur sur les lignes 11 et 20 respectivement, alors à qui ce pointeur pointe-t-il à ce moment-là ? En fait, cela détermine vers qui il pointe lors de son instanciation. Par exemple, lorsque l'objet est instancié pour la première fois (ligne 25), alors cela pointe vers l'objet $nameObject. Puis lors de l'impression à la ligne 18, print( $this. -><name) devient print($nameObject->name), puis bien sûr "heiyeluren" est affiché. Dans le deuxième cas, print( $this->name ) devient print( $nameObject2->name ), donc "PHP5" est affiché. Par conséquent, il s’agit d’un pointeur vers l’instance d’objet actuelle et ne pointe vers aucun autre objet ou classe.
(2)self
Tout d'abord, nous devons préciser que self pointe vers la classe elle-même, c'est-à-dire que self ne pointe vers aucun objet instancié. Généralement, self est utilisé pour pointer vers des variables statiques dans la classe.
1 <?php
2
Compteur 3 classes
4 {
5 //Définir les propriétés, y compris une variable statique
6 statique privé $firstCount = 0 ;
7 $lastCount privé ;
8
9 //Constructeur
10 fonction __construct()
11 {
12 $this->lastCount = ++selft::$firstCount; //Utiliser self pour appeler des variables statiques Lors de l'appel de self, vous devez utiliser :: (symbole d'opération de champ)
13}
14
15 //Imprimer la dernière valeur
16 fonctions printLastCount()
17 {
18 print( $this->lastCount );
19}
20}
vingt-et-un
22 //instancier un objet
23 $countObject = nouveau Compteur();
vingt-quatre
25 $countObject->printLastCount(); //Sortie 1
26
27 ?>
Il suffit de prêter attention à deux endroits ici, la ligne 6 et la ligne 12. Nous avons défini une variable statique $firstCount sur la deuxième ligne et la valeur initiale est 0. Ensuite, nous avons appelé cette valeur sur la ligne 12, en utilisant self pour l'appeler et en utilisant "::" pour nous connecter au milieu, ce que nous avons appelez l'opérateur de domaine, alors ce que nous appelons à ce moment est la variable statique $frestCount définie par la classe elle-même. Notre variable statique n'a rien à voir avec l'instance de l'objet suivant, elle est uniquement liée à la classe, alors si j'appelle. la classe elle-même, alors nous ne pouvons pas utiliser ceci pour faire référence, vous pouvez utiliser self pour faire référence, car self pointe vers la classe elle-même et n'a rien à voir avec une instance d'objet. En d’autres termes, s’il y a des membres statiques dans notre classe, nous devons également utiliser self pour les appeler.
(3) parent
Nous savons que parent est un pointeur vers la classe parent. Généralement, nous utilisons parent pour appeler le constructeur de la classe parent.
1 <?php
2
3 //classe de base
4 cours Animaux
5 {
6 //Attributs de la classe de base
7 public $nom; //nom
8
9 //Constructeur de classe de base
10 fonction publique __construct( $name )
11 {
12 $this->nom = $nom;
13}
14}
15
16 // Classe dérivée
17 classe Personne étend Animal // La classe Personne hérite de la classe Animal
18 {
19 public $personSex; //Genre
20 public $personAge; //Âge
vingt-et-un
22 //Constructeur de classe héritée
23 fonction __construct( $personSex, $personAge )
vingt-quatre {
25 parent::__construct( "heiyeluren" ); //Utiliser parent pour appeler le constructeur de la classe parent
26 $this->personSex = $personSex;
27 $this->personAge = $personAge;
28 }
29
30 fonctions printPerson()
31 {
32 print( $this->name. " est " .$this->personSex. ", cette année " .$this->personAge );
33}
34}
35
36 //Instancier l'objet Personne
37 $personObject = new Person( "male", "21");
38
39 //Exécuter l'impression
40 $personObject->printPerson(); //Sortie : heiyeluren est un homme, cette année 21
41
42 ?>
Nous prêtons attention aux détails suivants : les attributs des membres sont tous publics, en particulier ceux de la classe parent, pour que les classes héritées puissent y accéder. Nous prêtons attention au point clé, ligne 25 : parent::__construct( "heiyeluren" ). À ce stade, nous utilisons parent pour appeler le constructeur de la classe parent afin d'initialiser la classe parent, car les membres de la classe parent sont all public. Nous pouvons donc l'utiliser directement pour appeler la classe héritée.
Résumé :
il s'agit d'un pointeur vers une instance d'objet, self est une référence à la classe elle-même et parent est une référence à la classe parent.
En gros, c'est tout ce que je sais. Il doit y avoir des malentendus, veuillez les signaler !
Mon email : [email protected]
WriteTime : 2004-11-3 18:30
http://dev.csdn.net/author/heiyeshuwu/702e33d6abaf4be58c06f1b55cf0fc8c.html