Maison  >  Article  >  développement back-end  >  Espace de noms PHP et chargement automatique

Espace de noms PHP et chargement automatique

不言
不言original
2018-05-14 15:50:011662parcourir

Cet article présente l'espace de noms et le chargement automatique de PHP. Il a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

Introduction

Nous en avons parlé. chargement automatique des cours plus tôt, et puis j'y ai réfléchi.

Quand on écrit du code, à chaque fois qu'on appelle d'autres classes dans un autre fichier
On n'écrit pas spl_autoload_register cette méthode ? Alors, comment y sommes-nous parvenus ?

Principe

Il s'avère que notre PHP a introduit le concept d'espace de noms en 5.3 (c'est une des raisons pour lesquelles la plupart des frameworks ne supportent pas les versions antérieures à 5.3)

Tout le monde connaît dans une certaine mesure les espaces de noms : si vous ne savez pas allez dans le coin et réfléchissez-y

L'espace de noms est simplement une sorte d'identifiant, et son objectif principal est de résoudre les conflits de noms . question.

Tout comme dans la vie quotidienne, il existe de nombreuses personnes portant le même nom. Comment distinguer ces personnes ? Ensuite, vous devez ajouter quelques logos supplémentaires.

Il semble bon d'utiliser votre lieu de travail comme logo, afin que vous n'ayez pas à vous soucier de l'embarras d'une « collision de noms ».

Classification des espaces de noms
  • [ ] Espace de noms entièrement qualifié

  • [ ] Espace de noms qualifié

new 百度\李彦宏(); // 限定类名new \百度\李彦宏(); // 完全限定类名

Lorsque l'espace de noms actuel n'est pas déclaré, les noms de classe qualifiés et les noms de classe complets sont équivalents. Parce que si aucun espace n’est spécifié, la valeur par défaut est global().

namespace 谷歌;new 百度\李彦宏(); // 谷歌\百度\李彦宏(实际结果)new \百度\李彦宏(); // 百度\李彦宏(实际结果)

Cet exemple montre la différence entre l'utilisation de noms de classe qualifiés et de noms de classe complets dans les espaces de noms. (Nom de classe complet = espace de noms actuel + nom de classe qualifié)

/* 导入命名空间 */use 百度\李彦宏;new 李彦宏(); // 百度\李彦宏(实际结果)/* 设置别名 */use 百度\李彦宏 AS CEO;new CEO(); // 百度\李彦宏(实际结果)/* 任何情况 */new \百度\李彦宏();// 百度\李彦宏(实际结果)

L'utilisation de l'espace de noms ne fait que préfixer le nom de la classe, ce qui est moins susceptible d'entrer en conflit, et le système ne l'importera toujours pas automatiquement.

Si le fichier n'est pas importé, le système déclenchera la fonction __autoload et transmettra le nom de classe qualifié en paramètre avant de générer l'erreur « Classe non trouvée ».

Ainsi, les exemples ci-dessus sont tous basés sur la situation dans laquelle vous avez introduit manuellement les fichiers pertinents, sinon le système lancera "Classe 'Baidu Robin Li' introuvable".

Ainsi, après avoir introduit l'espace de noms, le chargement automatique a été introduit

Chargement automatique de la classe

Nous vous en avons déjà parlé lorsque nous avons parlé de spl_autoload_register . Aujourd'hui, nous allons parler d'une autre fonction
__autoload()

La fonction __autoload de PHP est une fonction magique Avant l'apparition de cette fonction, si 100 objets étaient référencés dans un fichier PHP, alors le fichier aurait besoin d'être inclus. ou nécessiter d'introduire 100 fichiers de classe, ce qui rendra le fichier php extrêmement volumineux. Il y a donc cette fonction __autoload.

Quand la fonction __autoload est-elle appelée ? Lorsque le mot-clé new est utilisé dans un fichier php pour instancier un objet, si la classe n'est pas définie dans ce fichier php, la fonction __autoload sera déclenchée. A ce moment, le fichier php qui définit la classe pourra être introduit, puis. , L'instanciation a réussi. (Remarque : si l'objet qui doit être instancié a trouvé la définition de la classe dans ce fichier, la fonction __autoload ne sera pas déclenchée)

La différence entre celui-ci et spl_autoload_register est

Lorsque __autoload et spl_autoload_register apparaissent dans le fichier en même temps, spl_autoload_register prévaudra

Recommandations associées :

fonction de téléchargement php

Problèmes d'impression PHP

À propos de l'espace de noms PHP

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