Maison php教程 php手册 PHP5指针的类别介绍

PHP5指针的类别介绍

Jun 13, 2016 am 11:05 AM
parent php5 self this 介绍 关键字 nous 指针 理解 de catégorie 首先

大家也许多首先我们来理解三个关键字: this,self,parent,从字面上比较好理解,是指这,自己,父亲,呵呵,比较好玩了,我们先建立几个概念,这三个关键字分别是用在什么地方 呢?我们初步解释一下,this是指向当前对象的指针(我们姑且用C里面的指针来看吧),self是指向当前类的指针,parent是指向父类的指针。

这么说还不能很了解,那我们就根据实际的例子结合来讲讲。

(1) PHP5指针之this

<ol class="dp-xml">
<li class="alt"><span><strong><font color="#006699"><span class="tag"></span><span class="tag-name">php</span></font></strong><span>   </span></span></li>
<li class=""><span> </span></li>
<li class="alt"><span>class UserName  </span></li>
<li class=""><span>{   </span></li>
<li class="alt"><span>//定义属性   </span></li>
<li class=""><span>private $name;  </span></li>
<li class="alt"><span> </span></li>
<li class=""><span>//定义构造函数  </span></li>
<li class="alt"><span>function __construct( $name )  </span></li>
<li class=""><span>{  </span></li>
<li class="alt">
<span>$this-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span class="attribute"><font color="#ff0000">name</font></span><span> = $name; //这里已经使用了this指针  </span>
</li>
<li class=""><span>}  </span></li>
<li class="alt"><span> </span></li>
<li class=""><span>//析构函数  </span></li>
<li class="alt"><span>function __destruct(){}  </span></li>
<li class=""><span> </span></li>
<li class="alt"><span>//打印用户名成员函数  </span></li>
<li class=""><span>function printName()  </span></li>
<li class="alt"><span>{  </span></li>
<li class="">
<span>print( $this-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>name ); //又使用了this指针  </span>
</li>
<li class="alt"><span>}  </span></li>
<li class=""><span>}  </span></li>
<li class="alt"><span> </span></li>
<li class=""><span>//实例化对象  </span></li>
<li class="alt">
<span>$</span><span class="attribute"><font color="#ff0000">nameObject</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">new</font></span><span> UserName( "heiyeluren" );  </span>
</li>
<li class=""><span> </span></li>
<li class="alt"><span>//执行打印  </span></li>
<li class="">
<span>$nameObject-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>printName(); //输出: heiyeluren  </span>
</li>
<li class="alt"><span> </span></li>
<li class=""><span>//第二次实例化对象  </span></li>
<li class="alt">
<span>$</span><span class="attribute"><font color="#ff0000">nameObject2</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">new</font></span><span> UserName( "PHP5" );  </span>
</li>
<li class=""><span> </span></li>
<li class="alt"><span>//执行打印  </span></li>
<li class="">
<span>$nameObject2-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>printName(); //输出:PHP5  </span>
</li>
<li class="alt">
<span></span><span class="tag"><strong><font color="#006699">?></font></strong></span><span> </span>
</li>
</ol>
Copier après la connexion

我们看,上面的类分别在11行和20行使用了this指针,那么当时this是指向谁呢?其实this是在实例化的时候来确定指向谁,比如第一次实例化对象 的时候(25行),那么当时this就是指向$nameObject对象,那么执行18行的打印的时候就把print( $this->name ),那么当然就输出了"heiyeluren"。第二个实例的时候,print( $this->name )变成了print( $nameObject2->name ),于是就输出了"PHP5"。所以说,this就是指向当前对象实例的指针,不指向任何其他对象或类。

(2)PHP5指针之self

首先我们要明确一点,self是指向类本身,也就是self是不指向任何已经实例化的对象,一般self使用来指向类中的静态变量。

<ol class="dp-xml">
<li class="alt"><span><strong><font color="#006699"><span class="tag"></span><span class="tag-name">php</span></font></strong><span> </span></span></li>
<li class=""><span> </span></li>
<li class="alt"><span>class Counter  </span></li>
<li class=""><span>{  </span></li>
<li class="alt"><span>//定义属性,包括一个静态变量  </span></li>
<li class="">
<span>private static $</span><span class="attribute"><font color="#ff0000">firstCount</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">0</font></span><span>;  </span>
</li>
<li class="alt"><span>private $lastCount;  </span></li>
<li class=""><span>//构造函数  </span></li>
<li class="alt"><span>function __construct()  </span></li>
<li class=""><span>{  </span></li>
<li class="alt">
<span>$this-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span class="attribute"><font color="#ff0000">lastCount</font></span><span> = ++selft::$firstCount; //使用self来调用静态变量,使用self调用必须使用::(域运算符号)  </span>
</li>
<li class=""><span>}  </span></li>
<li class="alt"><span>//打印最次数值  </span></li>
<li class=""><span>function printLastCount()  </span></li>
<li class="alt"><span>{  </span></li>
<li class="">
<span>print( $this-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>lastCount );  </span>
</li>
<li class="alt"><span>}   </span></li>
<li class=""><span>}  </span></li>
<li class="alt"><span> </span></li>
<li class=""><span>//实例化对象  </span></li>
<li class="alt">
<span>$</span><span class="attribute"><font color="#ff0000">countObject</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">new</font></span><span> Counter();  </span>
</li>
<li class="">
<span>$countObject-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>printLastCount(); //输出 1  </span>
</li>
<li class="alt">
<span></span><span class="tag"><strong><font color="#006699">?></font></strong></span><span> </span>
</li>
</ol>
Copier après la connexion

我们这里只要注意两个地方,第6行和第12行。我们在第二行定义了一个静态变量$firstCount,并且初始值为0,那么在12行的时候调用了这个值 得,使用的是self来调用,并且中间使用"::"来连接,就是我们所谓的域运算符,那么这时候我们调用的就是类自己定义的静态变量$ frestCount,我们的静态变量与下面对象的实例无关,它只是跟类有关,那么我调用类本身的的,那么我们就无法使用this来引用,可以使用 self来引用,因为self是指向类本身,与任何对象实例无关。换句话说,假如我们的类里面静态的成员,我们也必须使用self来调用。

(3)PHP5指针之parent

我们知道parent是指向父类的指针,一般我们使用parent来调用父类的构造函数。

<ol class="dp-xml">
<li class="alt"><span><strong><font color="#006699"><span class="tag"></span><span class="tag-name">php</span></font></strong><span> </span></span></li>
<li class=""><span>//基类  </span></li>
<li class="alt"><span>class Animal  </span></li>
<li class=""><span>{  </span></li>
<li class="alt"><span>//基类的属性  </span></li>
<li class=""><span>public $name; //名字  </span></li>
<li class="alt"><span>//基类的构造函数  </span></li>
<li class=""><span>public function __construct( $name )  </span></li>
<li class="alt"><span>{  </span></li>
<li class="">
<span>$this-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span class="attribute"><font color="#ff0000">name</font></span><span> = $name;  </span>
</li>
<li class="alt"><span>}  </span></li>
<li class=""><span>}  </span></li>
<li class="alt"><span>//派生类  </span></li>
<li class=""><span>class Person extends Animal //Person类继承了Animal类  </span></li>
<li class="alt"><span>{  </span></li>
<li class=""><span>public $personSex; //性别  </span></li>
<li class="alt"><span>public $personAge; //年龄  </span></li>
<li class=""><span>//继承类的构造函数  </span></li>
<li class="alt"><span>function __construct( $personSex, $personAge )  </span></li>
<li class=""><span>{  </span></li>
<li class="alt"><span>parent::__construct( "heiyeluren" ); //使用parent调用了父类的构造函数  </span></li>
<li class="">
<span>$this-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span class="attribute"><font color="#ff0000">personSex</font></span><span> = $personSex;  </span>
</li>
<li class="alt">
<span>$this-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span class="attribute"><font color="#ff0000">personAge</font></span><span> = $personAge;  </span>
</li>
<li class=""><span>}  </span></li>
<li class="alt"><span>function printPerson()  </span></li>
<li class=""><span>{  </span></li>
<li class="alt">
<span>print( $this-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>name. " is " .$this-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>personSex. ",this year " .$this-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>personAge );  </span>
</li>
<li class=""><span>}  </span></li>
<li class="alt"><span>}  </span></li>
<li class=""><span>//实例化Person对象  </span></li>
<li class="alt">
<span>$</span><span class="attribute"><font color="#ff0000">personObject</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">new</font></span><span> Person( "male", "21");  </span>
</li>
<li class=""><span> </span></li>
<li class="alt"><span>//执行打印  </span></li>
<li class="">
<span>$personObject-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>printPerson(); //输出:heiyeluren is male,this year 21  </span>
</li>
<li class="alt"><span> </span></li>
<li class="">
<span></span><span class="tag"><strong><font color="#006699">?></font></strong></span><span> </span>
</li>
</ol>
Copier après la connexion
我们注意这么几个细节:成员属性都是public的,特别是父类的,是为了供继承类通过this来访问。我们注意关键的地方,第25行:parent:: __construct( "heiyeluren" ),这时候我们就使用PHP5指针中的parent来调用父类的构造函数进行对父类的初始化,因为父类的成员都是public的,于是我们就能够在继承类中直接使用 this来调用。
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Pourquoi NameResolutionError(self.host, self, e) de e et comment le résoudre Pourquoi NameResolutionError(self.host, self, e) de e et comment le résoudre Mar 01, 2024 pm 01:20 PM

La raison de l'erreur est NameResolutionError(self.host,self,e)frome, qui est un type d'exception dans la bibliothèque urllib3. La raison de cette erreur est que la résolution DNS a échoué, c'est-à-dire le nom d'hôte ou l'adresse IP qui était. La tentative de résolution n'a pas pu être trouvée. Cela peut être dû au fait que l'adresse URL saisie est incorrecte ou que le serveur DNS est temporairement indisponible. Comment résoudre cette erreur Il peut y avoir plusieurs façons de résoudre cette erreur : Vérifiez si l'adresse URL saisie est correcte et assurez-vous qu'elle est accessible Assurez-vous que le serveur DNS est disponible, vous pouvez essayer d'utiliser la commande "ping" dans la ligne de commande pour tester si le serveur DNS est disponible Essayez d'accéder au site Web en utilisant l'adresse IP au lieu du nom d'hôte si vous êtes derrière un proxy

Comment les fonctions génériques gèrent-elles les pointeurs et les types de référence dans Golang ? Comment les fonctions génériques gèrent-elles les pointeurs et les types de référence dans Golang ? Apr 16, 2024 pm 04:06 PM

Lorsqu'une fonction générique gère les types de pointeurs dans Go, elle recevra une référence à la variable d'origine, permettant de modifier la valeur de la variable. Les types de référence sont copiés lorsqu'ils sont transmis, ce qui rend la fonction incapable de modifier la valeur de la variable d'origine. Des exemples pratiques incluent l'utilisation de fonctions génériques pour comparer des chaînes ou des tranches de nombres.

Guide du débutant PyCharm : analyse complète des fonctions de remplacement Guide du débutant PyCharm : analyse complète des fonctions de remplacement Feb 25, 2024 am 11:15 AM

PyCharm est un puissant environnement de développement intégré Python doté de fonctions et d'outils riches qui peuvent considérablement améliorer l'efficacité du développement. Parmi elles, la fonction de remplacement est l'une des fonctions fréquemment utilisées dans le processus de développement, qui peut aider les développeurs à modifier rapidement le code et à améliorer la qualité du code. Cet article présentera en détail la fonction de remplacement de PyCharm, combinée à des exemples de code spécifiques, pour aider les novices à mieux maîtriser et utiliser cette fonction. Introduction à la fonction de remplacement La fonction de remplacement de PyCharm peut aider les développeurs à remplacer rapidement le texte spécifié dans le code

Qu'est-ce que Dogecoin Qu'est-ce que Dogecoin Apr 01, 2024 pm 04:46 PM

Dogecoin est une crypto-monnaie créée sur la base de mèmes Internet, sans plafond d'approvisionnement fixe, avec des délais de transaction rapides, des frais de transaction faibles et une grande communauté de mèmes. Les utilisations incluent les petites transactions, les pourboires et les dons de bienfaisance. Cependant, son offre illimitée, la volatilité du marché et son statut de pièce de monnaie farfelue comportent également des risques et des inquiétudes. Qu’est-ce que Dogecoin ? Dogecoin est une crypto-monnaie créée à partir de mèmes et de blagues Internet. Origine et histoire : Dogecoin a été créé en décembre 2013 par deux ingénieurs logiciels, Billy Markus et Jackson Palmer. Inspiré du mème alors populaire « Doge », une photo comique représentant un Shiba Inu avec un anglais approximatif. Caractéristiques et avantages : Offre illimitée : contrairement à d’autres crypto-monnaies telles que Bitcoin

Méthodes avancées de type pointeur Golang pour améliorer les compétences en programmation Méthodes avancées de type pointeur Golang pour améliorer les compétences en programmation Apr 07, 2024 pm 06:42 PM

L'approche de type pointeur est disponible en langage Go, qui permet de définir une fonction de type pointeur afin de modifier la valeur pointée sans passer explicitement le pointeur dans la signature de la méthode. Cela offre simplicité et efficacité au code puisque les passes de copie par valeur n'ont pas besoin d'être copiées. La syntaxe de la méthode de type pointeur est : typeTypeName*Type\nfunc(t*TypeName)MethodName(). Pour utiliser des méthodes de type pointeur, vous créez un pointeur vers une instance du type, puis utilisez ce pointeur pour appeler la méthode. Les avantages des méthodes de type pointeur incluent la simplicité, l’efficacité et la modifiabilité du code. Il convient de noter que la méthode de type pointeur ne peut être utilisée que pour les types de pointeur et que vous devez être prudent lorsque vous l'utilisez, car la valeur de structure pointée peut être accidentellement

Comment utiliser la référence C++ et le passage de paramètres de pointeur ? Comment utiliser la référence C++ et le passage de paramètres de pointeur ? Apr 12, 2024 pm 10:21 PM

Les références et les pointeurs en C++ sont deux méthodes de transmission de paramètres de fonction, mais il existe des différences. Une référence est un alias pour une variable. La modification de la référence modifiera la variable d'origine, tandis que le pointeur stocke l'adresse de la variable. La modification de la valeur du pointeur ne modifiera pas la variable d'origine. Lorsque vous choisissez d'utiliser une référence ou un pointeur, vous devez prendre en compte des facteurs tels que la nécessité de modifier la variable d'origine, la nécessité ou non de transmettre une valeur nulle et les considérations de performances.

Introduction à la plateforme de vérification des scores en ligne (outil de requête de score pratique et rapide) Introduction à la plateforme de vérification des scores en ligne (outil de requête de score pratique et rapide) Apr 30, 2024 pm 08:19 PM

Les outils d'interrogation rapide des scores offrent plus de commodité aux étudiants et aux parents. Avec le développement d'Internet, de plus en plus d'établissements d'enseignement et d'écoles ont commencé à proposer des services de vérification des scores en ligne. Pour vous permettre de suivre facilement les progrès scolaires de votre enfant, cet article présentera plusieurs plateformes de vérification des scores en ligne couramment utilisées. 1. Commodité - Les parents peuvent vérifier les résultats des tests de leurs enfants à tout moment et n'importe où via la plateforme de vérification des scores en ligne. Les parents peuvent facilement vérifier les résultats des tests de leurs enfants à tout moment en se connectant à la plateforme de vérification des scores en ligne correspondante sur un ordinateur ou un téléphone mobile. Tant qu'il y a une connexion Internet, que ce soit au travail ou en dehors, les parents peuvent se tenir au courant de l'état d'apprentissage de leurs enfants et fournir des conseils et une aide ciblés à leurs enfants. 2. Fonctions multiples - en plus de la requête de scores, il propose également de nombreuses recherches en ligne d'informations telles que les horaires de cours et les modalités d'examen.

Introduction détaillée des fonctions du Samsung S24ai Introduction détaillée des fonctions du Samsung S24ai Jun 24, 2024 am 11:18 AM

2024 est la première année des téléphones mobiles IA. De plus en plus de téléphones mobiles intègrent plusieurs fonctions IA. Grâce à la technologie intelligente IA, nos téléphones mobiles peuvent être utilisés plus efficacement et plus facilement. Récemment, la série Galaxy S24 lancée au début de l’année a encore une fois amélioré son expérience d’IA générative. Jetons un coup d’œil à l’introduction détaillée des fonctions ci-dessous. 1. Autonomisation profonde de l'IA générative. La série Samsung Galaxy S24 a apporté de nombreuses applications intelligentes grâce à l'autonomisation du Galaxy AI. Ces fonctions sont profondément intégrées à Samsung One UI6.1, permettant aux utilisateurs d'obtenir une expérience intelligente pratique à tout moment, de manière significative. améliorer les performances des téléphones mobiles. La fonction de recherche instantanée lancée par la série Galaxy S24 est l’un des points forts. Il suffit aux utilisateurs d’appuyer longuement.

See all articles