Maison développement back-end tutoriel php Résumé des méthodes de chargement automatique et d'espace de noms PHP

Résumé des méthodes de chargement automatique et d'espace de noms PHP

Jan 05, 2018 am 11:00 AM
autoload php 空间

Le chargement automatique de PHP signifie que lorsque nous chargeons une classe instanciée, nous n'avons pas besoin d'écrire manuellement require pour importer le fichier class.php. Le programme le charge et l'importe automatiquement pour nous. Cet article présente principalement le chargement automatique de PHP. et les espaces de noms. Les amis qui en ont besoin peuvent se référer à l'application. J'espère que cela pourra aider tout le monde.

"Qu'est-ce qu'un espace de noms ? D'une manière générale, un espace de noms est un moyen d'encapsuler des choses. Ce concept abstrait peut être vu à de nombreux endroits. Par exemple, dans les systèmes d'exploitation, les répertoires sont utilisés pour regrouper des jeux de regroupement de fichiers associés. le rôle d'un espace de noms pour les fichiers d'un répertoire. Par exemple, le fichier foo.txt peut exister dans les répertoires /home/greg et /home/other en même temps, mais dans le même répertoire il ne peut pas y en avoir deux. txt dans le répertoire De plus, lors de l'accès au fichier foo.txt en dehors du répertoire /home/greg, nous devons mettre le nom du répertoire et le séparateur de répertoire avant le nom du fichier pour obtenir /home/greg/foo.txt. Le principe est appliqué au domaine de la programmation, c'est la notion d'espace de noms. "

Le chargement automatique de PHP signifie que lorsque nous chargeons une classe instanciée, nous n'avons pas besoin d'écrire manuellement require pour importer le fichier class.php. , et le programme aide automatiquement. Nous le chargeons et l'importons. Avec la spécification de l'espace de noms, nous pouvons facilement gérer le chargement et l'appel de différentes classes dans des systèmes complexes.

1. Le principe du chargement automatique et l'utilisation de __autoload

Le principe du chargement automatique est que lorsque nous instancions une classe, si PHP ne trouve pas la classe, il appellera automatiquement le __autoload ($class_name) dans ce fichier, et notre nouveau class_name devient le paramètre de cette méthode. Ainsi, dans cette méthode, nous pouvons exiger le fichier de classe de chemin correspondant en fonction des divers jugements et divisions dont nous avons besoin d'un nouveau nom_classe pour réaliser le chargement automatique.

Regardons d'abord l'appel automatique de __autoload(), par exemple :

index.php

<?php 
$db = new Db();
Copier après la connexion

Si on n'importe pas manuellement la classe Db, la programme Une erreur peut être signalée, indiquant que cette classe est introuvable :

Erreur fatale : Erreur non détectée : Classe 'DB' introuvable dans D:webhellowebademo2017autoloadindex.php:2 Trace de pile : #0 {main} levée dans D:webhellowebademo2017autoloadindex .php en ligne 2

Alors, ajoutons maintenant la méthode __autoload() et jetons un œil :

$db = new DB();
function __autoload($className) {
 echo $className;
 exit();
}
Copier après la connexion

Selon la description du mécanisme de chargement automatique ci-dessus, il affichera : Db, c'est-à-dire Nous avons besoin du nom de classe de la nouvelle classe. Par conséquent, à ce stade, nous pouvons charger le fichier de bibliothèque de classes selon les besoins dans la méthode __autoload().

2. spl_autoload_register se charge automatiquement

S'il s'agit d'un petit projet, vous pouvez utiliser __autoload() pour réaliser un chargement automatique de base. Mais si un projet est volumineux ou si un chargement automatique différent est requis pour charger des fichiers avec des chemins différents, __autoload sera inutile pour le moment, car une seule fonction __autoload() est autorisée dans un projet, car PHP n'autorise pas les fonctions avec des noms en double. , ce qui signifie que vous ne pouvez pas déclarer deux fichiers de fonction __autoload(), sinon une erreur fatale sera signalée. Ce qu'il faut faire? Ne vous inquiétez pas, quoi que vous pensiez, le maître PHP y a déjà pensé. Ainsi, une autre fonction géniale comme spl_autoload_register() est née et l'a remplacée. Il fonctionne plus efficacement et est plus flexible.

Voyons d'abord comment l'utiliser. Ajoutez le code suivant à index.php.

<?php 
spl_autoload_register(function($className){
 if (is_file(&#39;./Lib/&#39; . $className . &#39;.php&#39;)) {
 require &#39;./Lib/&#39; . $className . &#39;.php&#39;;
 }
});
$db = new Db();
$db::test();
Copier après la connexion

Ajoutez le code suivant au fichier LibDb.php :

<?php 
class Db
{
 public static function test()
 {
 echo &#39;Test&#39;;
 }
}
Copier après la connexion

Après avoir exécuté index.php, lorsque new Db() est appelé, spl_autoload_register ira automatiquement dans la bibliothèque / répertoire Recherchez le fichier Db.php correspondant. Après succès, $db::test(); De même, s'il y a plusieurs fichiers de classe php dans le répertoire Lib, ils peuvent être appelés directement dans index.php sans nécessiter plusieurs fichiers.

En d'autres termes, spl_autoload_register peut être réutilisé plusieurs fois. Cela résout les défauts de __autoload. Si une page a plusieurs spl_autoload_register, l'ordre d'exécution est dans l'ordre d'enregistrement, un par un. si vous le trouvez.

3. spl_autoload_register chargement automatique et espace de noms d'espace de noms

Pour les systèmes très complexes, la structure des répertoires sera également très complexe. L'espace de noms standardisé résout le problème d'un grand nombre de fichiers, de fonctions et. classes sous des chemins complexes. Problème de nom en double. Le chargement automatique est désormais la pierre angulaire des frameworks PHP modernes, et spl_autoload_register est essentiellement utilisé pour implémenter le chargement automatique. Ainsi, spl_autoload_register + namespace est devenu un courant dominant.

Selon la série de spécifications PSR, la dénomination des espaces de noms a été très standardisée, de sorte que le chemin détaillé peut être trouvé en fonction de l'espace de noms pour trouver le fichier de classe.

Nous utilisons l'exemple le plus simple pour illustrer comment des systèmes complexes chargent automatiquement les fichiers de classe.

Tout d'abord, nous préparons la structure du répertoire système :

----/Lib  // 类目录
 --Db.php
 --Say.php
----autoload.php // 自动加载函数
----index.php // 首页
Copier après la connexion

Ce qui précède est un répertoire système de base. Ce que nous voulons réaliser, c'est utiliser l'espace de noms et le chargement automatique, directement sur l'index de la page d'accueil. .php Appelez plusieurs classes dans le répertoire Lib.

Nous préparons deux fichiers de colonnes :

Db.php

<?php 
namespace Lib;
class Db
{
 public function __construct()
 {
 //echo &#39;Hello Db&#39;;
 }
 public static function test()
 {
 echo &#39;Test&#39;;
 }
}
Say.php
<?php
namespace Lib;
class Say 
{
 public function __construct()
 {
 //echo &#39;Hello&#39;;
 }
 public function hello()
 {
 echo &#39;say hello&#39;;
 }
}
Copier après la connexion

Les deux fichiers de classe ordinaires ci-dessus ont ajouté un espace de noms : l'espace de noms Lib représente cette classe Le fichier appartient à le nom du répertoire Lib Bien sûr, vous pouvez choisir un nom différent pour représenter le nom de votre projet.

Regardons maintenant autoload.php :

<?php 
spl_autoload_register(function ($class) {
 $prefix = &#39;Lib\\&#39;;
 $base_dir = __DIR__ . &#39;/Lib/&#39;;
 // does the class use the namespace prefix?
 $len = strlen($prefix);
 if (strncmp($prefix, $class, $len) !== 0) {
 // no, move to the next registered autoloader
 return;
 }
 $relative_class = substr($class, $len);
 // 兼容Linux文件找。Windows 下(/ 和 \)是通用的
 $file = $base_dir . str_replace(&#39;\\&#39;, &#39;/&#39;, $relative_class) . &#39;.php&#39;;
 if (file_exists($file)) {
 require $file;
 }
});
Copier après la connexion

以上代码使用函数 spl_autoload_register() 首先判断是否使用了命名空间,然后验证要调用的类文件是否存在,如果存在就 require 类文件。

好了,现在我们在首页index.php这样调用:

<?php 
use Lib\Db;
use Lib\Say;
require &#39;./autoload.php&#39;;
$db = new Db();
$db::test();
$say = new Say;
$say->hello();
Copier après la connexion

我们只需使用一个require将autoload.php加载进来,使用 use 关键字将类文件路径变成绝对路径了,当然你也可以在调用类的时候把路径都写上,如: new Lib\Db(); ,但是涉及到多个类互相调用的时候就会很棘手,所以我们还是在文件开头就使用 use 把路径处理好。

接下来就直接调用Lib/目录下的各种类文件了,你可以在Lib/目录下放置多个类文件尝试下。

运行index.php看看是不是如您所愿。

结束语

该文简单介绍了自动加载以及命名空间的使用,实际开发中,我们很少去关注autoload自动加载的问题,因为大多数现代PHP框架都已经处理好了文件自动加载的问题。开发者只需关注业务代码,使用规范的命名空间就可以了。当然,如果你想自己开发个项目不依赖大型框架亦或者自己开发php框架,那你就得熟悉下autoload自动加载这个好东西了,毕竟它可以让我们“偷懒”,省事多了。

现代php里,我们经常使用 Composer 方式安装的组件,都可以通过autoload实现自动加载,所以还是一个“懒”字给我们带来了极好的开发效率。

相关推荐:

Laravel中autoload方法实现的用法详解

php autoload的用法总结

简单介绍自动加载类__autoload()用法

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
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
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