Table des matières
相关推荐:
Maison développement back-end tutoriel php Utilisation de l'espace de noms de l'espace de commande PHP et utilisation (exemple)

Utilisation de l'espace de noms de l'espace de commande PHP et utilisation (exemple)

May 17, 2018 am 10:02 AM
namespace php 实例

Cet article présente principalement un résumé pratique de l'utilisation et de l'utilisation de l'espace de noms de l'espace de commande PHP. Les amis qui en ont besoin peuvent s'y référer

L'un des objectifs les plus clairs de l'espace de noms est de résoudre le problème des noms en double. . Deux noms ne sont pas autorisés en PHP. Si deux fonctions ou classes portent le même nom, une erreur fatale se produira. Dans ce cas, le problème peut être résolu à condition d'éviter la duplication de nom. La méthode la plus courante consiste à se mettre d'accord sur un préfixe.

Le but de l'utilisation de l'espace de noms :

Lorsque vous travaillez sur un projet d'équipe, évitez les conflits avec les classes créées par d'autres membres de l'équipe lorsque des individus le sont ; responsable du projet, éviter les conflits entre les classes nouvellement créées avant et après

Selon la compréhension personnelle, lors de l'utilisation de la classe requise, elle doit d'abord être introduite par require ou include, donc la prémisse d'une redéfinition de classe L'erreur qui se produit est la suivante : deux classes portant le même nom. Des classes ont été introduites. Actuellement, certains frameworks PHP chargeront automatiquement (c'est-à-dire incluront) toutes les classes de modèle nouvellement créées. Ainsi, afin d'éviter les conflits de noms entre vos nouvelles classes de modèle et les classes principales natives du framework du projet, un espace de noms est utilisé. (Après y avoir réfléchi, les conflits avec les nouvelles classes créées par les membres de l'équipe doivent être évités grâce à la communication. Même après l'incident, le nom de la classe doit être réajusté et maintenu immédiatement pour éviter une complexité de maintenance accrue causée par une confusion dans la compréhension ultérieure de la classe. )

Combiné avec les méthodes d'utilisation pour mieux comprendre son objectif.

Comment utiliser l'espace de noms :

Pour les tests, je vais créer 3 fichiers : 1.php et name.php (ce fichier utilisé pour effectuer des tests), qui ne seront pas expliqués plus tard. Veuillez faire vous-même attention aux modifications du code.

1. La définition des noms après l'espace de noms n'est pas sensible à la casse

namespace one;
namespace One;
namespace ONE;

Toutes les méthodes d'écriture ci-dessus sont acceptables, choisissez-en simplement une comme votre propre norme. (J'utiliserai la première méthode pour tester dans le code suivant)

2. S'il n'y a pas d'espace de noms défini, il est entendu que l'espace de noms de niveau supérieur est utilisé. Lors de la création d'une nouvelle classe, vous pouvez ajouter ou non une barre oblique inverse avant la classe.

//1.php 
class Person{
 function __construct(){
  echo 'I am one!';
 }
}
//name.php
require_once './1.php';
new Person(); //输出 I am one!;
new \Person(); //输出 I am one!;
Copier après la connexion

3. Lorsque vous ajoutez une nouvelle classe, lorsque vous apportez un espace de noms, assurez-vous d'utiliser des caractères de barre oblique inverse au lieu de Slash.

Méthode de mémoire : recherchez les barres obliques en % dans l'ordre dans lequel elles sont interprétées comme des barres obliques. (Parfois, quand je parle de barres obliques inverses, je ne sais même pas dans quelle direction il s'agit. Je m'en souvenais dans le sens ascendant de gauche à droite, mais maintenant je trouve que c'est trop peu fiable)

//name.php
require_once './1.php';
new /Person(); // 代码报错:Parse error: syntax error, unexpected '/'
Copier après la connexion

4. La classe est dans l'espace de noms spécifié. Lorsque vous créez une nouvelle classe, assurez-vous d'apporter l'espace de noms spécifié.

n'apporte pas l'espace de noms spécifié. Selon le point 2, PHP trouvera cette classe à partir de l'espace de noms de niveau supérieur. N'oubliez pas : cela ne peut pas être compris car l'espace de noms de niveau supérieur inclut tous les autres espaces de noms. Au lieu de cela, l’espace de noms de niveau supérieur doit être complètement séparé des autres espaces de noms.

//1.php 
namespace one;
class Person{
 function __construct(){
  echo 'I am one!';
 }
}
//name.php
require_once './1.php';
new \one\Person(); //输出 I am one!;
new \Person(); //代码报错:Fatal error: Class 'Person' not found
Copier après la connexion

Vous pouvez prendre cet exemple populaire pour comprendre : apporter un espace de noms désigné pour représenter la pomme de quelqu'un (dans sa main), l'espace de noms de niveau supérieur représente les pommes dans la boîte à pommes (dans la boîte). Maintenant, si vous voulez trouver la pomme de quelqu'un, vous devez apporter l'espace de noms de quelqu'un, sinon vous chercherez la pomme de quelqu'un dans la boîte, et bien sûr vous ne la trouverez pas.

5. Le code après la déclaration de l'espace de noms appartient à cet espace de noms, même s'il y a include ou require, il ne sera pas affecté (l'accent est mis sur la compréhension de la seconde moitié de la phrase, voir le code pour plus de détails).

//1.php 
namespace one;
class Person{
 function __construct(){
  echo 'I am one!';
 }
}
//name.php
namespace test;
require './1.php'; 
new \one\Person(); //输出 I am one!;
new Person(); //这里结果会是什么呢,猜猜看
Copier après la connexion

La dernière ligne entraîne une erreur :

Fatal error: Class 'test\Person' not found
Copier après la connexion

Tout d'abord, comparez ici avec le point 2 :

Au point 2, j'ai dit que lorsqu'il n'y a pas d'espace de noms et de nouvelle classe, cela signifie la même chose qu'il y ait une barre oblique inverse ou non.

Ici, avec l'espace de noms, la signification d'avoir et de ne pas avoir de barres obliques inverses est différente.

Remplacez la dernière ligne par

new \Person();
Copier après la connexion

Le résultat est une erreur :

Fatal error: Class 'Person' not found
Copier après la connexion

Ensuite, parlons du point actuel.

Nous pouvons constater que l'espace de noms correspondant à la dernière ligne de code est test et n'est pas affecté par l'espace de noms dans le fichier require.

Pour renforcer encore la vérification, j'ai modifié le fichier name.php comme suit :

//name.php
namespace test;
require './1.php'; 
class Person{
 function __construct(){
  echo 'I am test!';
 }
}
new \one\Person(); //输出 I am one!;
new Person(); //这里结果会是什么,自己猜猜看
Copier après la connexion

Enfin, cet exemple a rafraîchi ma compréhension de require J'ai compris.

Selon ma compréhension précédente de require : avant que le programme PHP ne soit exécuté, il lira d'abord le fichier spécifié par require, ce qui en fait une partie de la page Web du programme PHP. Je le comprends donc souvent simplement comme un remplacement, ce qui consiste simplement à remettre le code extrait à sa place d'origine. Ensuite, j'ai essayé de mettre le contenu du fichier 1.php dans name.php :

//name.php
namespace test;
namespace one;
class Person{
 function __construct(){
  echo 'I am one!';
 }
}
class Person{
 function __construct(){
  echo 'I am test!';
 }
}
Copier après la connexion

Sans la nouvelle classe, le fichier signalera une erreur :

Erreur fatale : impossible de redéclarer la classe onePerson

Il semble que la simple compréhension de require comme remplacement ne fonctionne pas ici.

6. L'espace de noms ne contient pas le nom de la classe. Même s'il existe une partie avec le même nom que le nom de la classe, elle ne représente pas la classe. nouvelle classe, vous devez encore apporter cette partie.

//name.php
namespace test\person;
class Person{
 function __construct(){
  echo 'I am test!';
 }
}new \test\person\Person();  //命名空间里person无法代表类名
Copier après la connexion

Mais c'est tout simplement superflu, n'incluez simplement pas le nom de la classe dans l'espace de noms.

7. Plusieurs espaces de noms peuvent exister dans un fichier php, et il ne peut y avoir de code avant le premier espace de noms.

只说第一个命名空间前不能有任何代码,之后的命名空间之前可以有代码。这个自行测试即可。

//name.php
namespace test;
echo 'zhai14';
namespace zhai;
require './1.php';
Copier après la connexion

php命名空间namespace告一段落了,接下来说说use的用途。

使用use的目的:

在命名空间字符串过长时,使用use可以相应的缩短命名空间。

use的使用方法:

1.new类时,最前面无需用反斜杠。此外,use后没有as时,缩短的命名空间默认为最后一个反斜杠后的内容。

//name.php
namespace animal\dog;
class Life{
 function __construct(){
  echo 'dog life!';
 }
}
namespace animal\cat;
class Life{
 function __construct(){
  echo 'cat life!';
 }
}
new Life(); //按照代码执行顺序,这里默认animal\cat这个命名空间
new \animal\dog\Life(); //A
use animal\dog; //a
new dog\Life(); //B
use animal\dog as d; //b
new d\Life();
Copier après la connexion

通过A、B行代码比较,需要注意:

使用use后,new类时,最前面没有反斜杠。

没使用use时,命名空间最前面有反斜杠

通过a、b行代码比较,可以理解:

use后没有as时,缩短的命名空间默认为最后一个反斜杠后的内容。如上的:

use animal\dog;

相当于

use animal\dog as dog;

2.namespace后面不建议加类名,但use后可以。

//name.php
namespace animal\dog;
class Life{
 function __construct(){
  echo 'dog life!';
 }
}
namespace animal\cat;
class Life{
 function __construct(){
  echo 'cat life!';
 }
}
use animal\dog\Life as dog; 
new dog();
Copier après la connexion

如上所示,use后加上类名后,就相当于把类改了个名称:由Life改为dog了。

上面不用as dog就会报错:

Fatal error: Cannot use animal\dog\Life as Life because the name is already in use
因为cat下也有个一样名称的Life类。

可以理解为,使用use后,这个昵称对应的类只能归当前命名空间占有,其它命名空间下不允许存在该类。

//name.php
namespace animal\dog;
class Life{
 function __construct(){
  echo 'dog life!';
 }
}
class Dog{
 function __construct(){
  echo 'dog in dog!';
 }
}
namespace animal\cat;
// class Dog{
// function __construct(){
//  echo 'dog in cat!';
//  }
// }
class Life{
 function __construct(){
  echo 'cat life!';
 }
}
use animal\dog; 
new dog\Dog();
Copier après la connexion

如上,使用了

use animal\dog;
cat

通过上面代码,我想使用use的目的效果(缩短命名空间名称)就很明显了。

简单总结一下:

namespace就是划分领域的作用,代表这些东西是属于某个命名空间下的。

use就是起小名的作用,不论写起来还是说起来都可以省不少事儿。

相关推荐:

PHP命令空间的用法大全

php user_error()函数的简介

有关php user_error()函数的文章推荐10篇

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

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)

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.

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

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

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