Table des matières
parent
static
this
self
Slots
Maison développement back-end tutoriel php Analyser le mot-clé self de PHP

Analyser le mot-clé self de PHP

Jun 27, 2019 pm 04:25 PM
php self

Analyser le mot-clé self de PHP

Quelqu'un dans le groupe PHP a posé des questions sur l'utilisation du mot-clé self La réponse est relativement évidente : vous ne pouvez pas utiliser this pour appeler des fonctions non membres au sein d'un membre statique. fonction, mais vous pouvez utiliser selfAppeler des fonctions/variables/constantes membres statiques ; d'autres fonctions membres peuvent utiliser self pour appeler des fonctions membres statiques et des fonctions membres non statiques. Au fur et à mesure que la discussion s'approfondissait, j'ai découvert que self n'était pas si simple. Compte tenu de cela, cet article compare et différencie d'abord plusieurs mots-clés, puis résume l'utilisation de self. La différence entre

et parent, static et this

Pour bien comprendre self, il faut le distinguer de parent, static et this ouvert. Des comparaisons sont faites ci-dessous. La distinction entre

parent

self et parent est relativement simple : parent fait référence à la méthode (ou variable) cachée de la classe parent/classe de base, et self Référence à sa propre méthode (ou variable). Par exemple, le constructeur de la classe parent est appelé dans le constructeur :

class Base {
    public function __construct() {
        echo "Base contructor!", PHP_EOL;
    }
}

class Child {
    public function __construct() {
        parent::__construct();
        echo "Child contructor!", PHP_EOL;
    }
}

new Child;
// 输出:
// Base contructor!
// Child contructor!
Copier après la connexion

static

staticLe but général est de modifier la fonction ou la variable pour en faire une fonction de classe et une classe variable, et elle peut également être modifiée dans la fonction. Les variables prolongent leur durée de vie tout au long de la durée de vie de l'application. Mais son association avec self est une nouvelle utilisation introduite depuis PHP 5.3 : la liaison statique retardée.

Avec la fonction de liaison statique retardée de static, la classe appartenant peut être déterminée dynamiquement au moment de l'exécution. Par exemple :

class Base {
    public function __construct() {
        echo "Base constructor!", PHP_EOL;
    }

    public static function getSelf() {
        return new self();
    }

    public static function getInstance() {
        return new static();
    }

    public function selfFoo() {
        return self::foo();
    }

    public function staticFoo() {
        return static::foo();
    }

    public function thisFoo() {
        return $this->foo();
    }

    public function foo() {
        echo  "Base Foo!", PHP_EOL;
    }
}

class Child extends Base {
    public function __construct() {
        echo "Child constructor!", PHP_EOL;
    }

    public function foo() {
        echo "Child Foo!", PHP_EOL;
    }
}

$base = Child::getSelf();
$child = Child::getInstance();

$child->selfFoo();
$child->staticFoo();
$child->thisFoo();
Copier après la connexion

Le résultat du programme est le suivant :

Base constructor!
Child constructor!
Base Foo!
Child Foo!
Child Foo!
Copier après la connexion

En termes de références de fonction, la différence entre self et static est : pour les fonctions membres statiques, self pointe vers la classe actuelle du code, static pointe vers la classe appelante ; pour les fonctions membres non statiques, self supprime le polymorphisme et pointe vers la fonction membre de la classe actuelle static est équivalent à this. , qui pointe dynamiquement vers la fonction de la classe appelante. Les trois mots-clés

parent, self et static sont très intéressants à regarder ensemble. Ils pointent respectivement vers la classe parent, la classe actuelle et la sous-classe, qui ont un peu un ". saveur passée, présente et future.

this

self et this sont les combinaisons les plus discutées et les plus susceptibles d'être mal utilisées. Les principales différences entre les deux sont les suivantes :

  1. this ne peut pas être utilisé dans les fonctions membres statiques, self peut
  2. accéder aux fonctions/variables membres statiques, Il est recommandé d'utiliser pour self au lieu de $this:: ou $this-> ;
  3. ne peut pas utiliser self pour accéder aux variables membres non statiques, uniquement this;
  4. this À utiliser lorsque l'objet a été instancié, self n'a pas cette restriction ;
  5. est utilisé dans une fonction membre non statique, self supprime le comportement polymorphe et fait référence à la fonction de classe actuelle ; et la référence this appelle la fonction de remplacement de la classe (le cas échéant). Les utilisations de

self

Après avoir lu les différences entre les trois mots-clés ci-dessus, l'utilisation de self est-elle immédiatement apparente ? Pour résumer en une phrase, c'est-à-dire : self pointe toujours vers "la classe actuelle (et l'instance de classe)". En détail, c'est :

  1. remplace le nom de la classe et fait référence aux variables membres statiques et aux fonctions statiques de la classe actuelle
  2. supprime le comportement polymorphe et fait référence aux fonctions de la classe actuelle ; classe actuelle au lieu de sous-classes. Implémentation de la couverture

Slots

  1. Parmi ces mots-clés, seul this doit être ajouté avec le symbole $ et doit l'être. ajouté. Le trouble obsessionnel-compulsif signifie que c'est très inconfortable ;
  2. Les fonctions membres statiques ne peuvent pas appeler les fonctions membres non statiques via $this->, mais elles peuvent être appelées via self::, et elles peuvent toujours fonctionner correctement. sans utiliser $this-> dans la fonction appelante. Ce comportement semble se comporter différemment dans différentes versions de PHP. C'est ok dans la version 7.3 actuelle
  3. sorties self dans les fonctions statiques et les fonctions non statiques. Ils sont tous string(4) "self", la sortie du puzzle
  4. return $this instanceof static::class; aura des erreurs grammaticales, mais les deux façons d'écrire suivantes sont normales :

    $class = static::class;
    return $this instanceof $class;
    // 或者这样:
    return $this instanceof static;
    Copier après la connexion

    Alors pourquoi ce? !

Pour plus d'articles techniques liés à PHP, veuillez visiter la colonne Tutoriel PHP pour apprendre !

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 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

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

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)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

See all articles