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
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 ?
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 ».
[ ] 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
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
À 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!