Maison > Article > développement back-end > PHP résout plusieurs conflits de chargement automatique dans le projet
Dans certains frameworks, le mécanisme de chargement automatique signale directement une erreur lorsqu'il s'avère qu'il ne peut pas être chargé, sans transférer le contrôle à la méthode de chargement automatique suivante. Par exemple, je souhaite présenter le SDK d'interface de service Alibaba Cloud. Dans le SDK, il est livré avec une méthode de chargement automatique, comme suit :
<?php /** * Copyright (C) Alibaba Cloud Computing * All rights reserved */ $version = '0.6.0'; function Aliyun_Log_PHP_Client_Autoload($className) { $classPath = explode('_', $className); if ($classPath[0] == 'Aliyun') { if(count($classPath)>4) $classPath = array_slice($classPath, 0, 4); $filePath = dirname(__FILE__) . '/' . implode('/', $classPath) . '.php'; if (file_exists($filePath)) require_once($filePath); } } spl_autoload_register('Aliyun_Log_PHP_Client_Autoload');
La méthode de chargement automatique ci-dessus entrera en conflit avec la méthode de chargement du framework d'origine. La solution est la suivante :
<?php function autoloadAdjust() { // 取原有的加载方法 $oldFunctions = spl_autoload_functions(); // 逐个卸载 if ($oldFunctions){ foreach ($oldFunctions as $f) { spl_autoload_unregister($f); } } // 注册本框架的自动载入 spl_autoload_register( # 就是aliyun sdk的加载方法 function ($className) { $classPath = explode('_', $className); if ($classPath[0] == 'Aliyun') { if(count($classPath)>4) $classPath = array_slice($classPath, 0, 4); unset($classPath[0]); $filePath = dirname(__FILE__) . '/' . implode('/', $classPath) . '.php'; if (file_exists($filePath)) require_once($filePath); } } ); // 如果引用本框架的其它框架已经定义了__autoload,要保持其使用 if (function_exists('__autoload')) { spl_autoload_register('__autoload'); } // 再将原来的自动加载函数放回去 if ($oldFunctions){ foreach ($oldFunctions as $f) { spl_autoload_register($f); } } } # 最后调用上面方法 autoloadAdjust();
Remarque. que lors de son introduction, utilisez-le selon la méthode ci-dessus. Vous devrez peut-être changer le chemin du fichier dans le code
Référence :
.Récemment, lors du développement, le framework ZF et un framework indépendant est utilisé pour coopérer.
Démarrer d'abord Après avoir installé ZF, j'ai démarré mon propre framework et j'ai constaté que le chargement automatique de mon propre framework ne prenait pas effet.
Les deux les parties ont utilisé spl_autoload_register pour enregistrer la méthode de chargement automatique.
Après analyse, elle a été trouvée, la méthode de chargement de ZF signale directement une erreur lorsqu'il s'avère qu'elle ne peut pas être chargée, sans transférer le contrôle à la méthode de chargement automatique suivante.
Si vous enregistrez d'abord la méthode de chargement de votre propre framework, il n'y aura aucun problème car lorsque la méthode de chargement automatique du framework indépendant ne trouve pas la classe, elle renvoie False, qui transfère le contrôle à. la méthode de chargement suivante
L'état du projet fait que l'ordre d'enregistrement est ZF en premier. J'ai vérifié le manuel et écrit Suivez la procédure ci-dessous pour ajuster l'ordre d'enregistrement
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!