Maison  >  Article  >  développement back-end  >  La différence d'utilisation de cet autostatique en PHP

La différence d'utilisation de cet autostatique en PHP

零到壹度
零到壹度original
2018-04-08 15:27:061476parcourir

Cet article présente principalement la différence entre cet auto statique en PHP. L'éditeur pense que c'est plutôt bien, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur et jetons un coup d'œil.

Introduction

Je faisais récemment de la conception de cours de génie logiciel et j'ai rencontré un problème. Je suis allé chercher le code source de Laravel et j'ai cherché à nouveau, et j'ai découvert qu'il s'agissait d'une question d'auto-statique. Des problèmes surviennent en raison d'une mauvaise compréhension, alors enregistrez-les pour éviter de refaire les mêmes erreurs.

Texte

this

ceci est plus facile à comprendre. Il pointe vers l'objet actuel et est utilisé pour accéder aux variables non statiques et aux méthodes non statiques de l'objet actuel. object. Il est lié à l'objet. ;

<?php
class Person {
    public $name;    
    
    public function getName() {
        echo $this->name;
    }
}

$p = new Person();
$p2 = new Person();
$p->name = "小红";
$p2->name = "小明";
$p->getName();  // 小红
$p2->getName();  // 小明

Dans l'exemple ci-dessus, deux objets sont nouveaux et les attributs de nom des objets sont définis respectivement. Ceci est utilisé dans getName() pour accéder au nom. attribut de l'objet actuel, donc les valeurs de nom sont respectivement affichées. Par conséquent, cela pointe vers l’objet actuel et ne pointe pas vers d’autres objets ou classes.

self

self est différent de cela. Il pointe vers la classe elle-même et ne pointe vers aucun objet instancié. Il est généralement utilisé pour accéder aux variables statiques et aux méthodes statiques de la classe ; 🎜>

<?php
class Person {
    public static $name = "小红";    
    
    public static function getName() {
        echo self::$name;
    }
}

$p = new Person();
$p2 = new Person();
$p::getName();  // 小红
$p2::getName();  // 小红
$p::$name = "小明";
$p::getName();  // 小明
$p2::getName();  // 小明
Dans l'exemple ci-dessus, deux objets sont nouveaux et l'attribut name d'un objet est modifié. La valeur de l'attribut name de l'autre objet est également modifiée. Par conséquent, self pointe vers la classe actuelle et a. rien à voir avec l'objet. Il est partagé par tous les objets.

static

static est identique à self, les deux pointent vers la classe et sont généralement utilisés pour accéder aux variables statiques et aux méthodes statiques de la classe, mais il existe quelques différences plus précisément : self. écrit Dans quelle classe cette classe est réellement appelée ; static est écrit dans la classe parent, puis cette statique est utilisée via la sous-classe, qui est officiellement appelée

liaison statique tardive . .

<?phpclass A {
    public function say() {
        echo "Hello";
    }    
    
    public function saySelf() {
        self::say();
    }    
    
    public function sayStatic() {
        static::say();
    }
}

class B extends A {
    public function say() {
        echo "World";
    }
}

$b = new B();
$b->say();  // World
$b->saySelf();  // Hello
$b->sayStatic();  // World
Comme vous pouvez le voir dans l'exemple ci-dessus, self est écrit en classe A, et lorsqu'il est appelé, il pointe vers la classe A. static est également écrit en classe A, mais utilise un objet de classe B , une sous-classe de la classe A. Lors de l'appel, il pointe vers la classe B. Lorsqu'il est utilisé, static détermine la classe vers laquelle il pointe. Il s'agit d'une

liaison statique tardive .

Liaison statique tardive

Résumé

cela pointe vers l'objet actuel, utilisé pour accéder aux variables non statiques et aux méthodes non statiques de l'objet actuel

self pointe vers la classe, généralement utilisé pour accéder aux variables statiques et aux méthodes statiques de la classe actuelle, la classe vers laquelle elle pointe a été déterminée avant l'exécution
static pointe vers la classe, généralement utilisée pour accéder aux variables statiques et aux méthodes statiques de ; la classe actuelle, mais
ne se limite pas à Un appel statique détermine à quelle classe il pointe au moment de l'exécution.

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!

Déclaration:
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