脚本宝典收集整理的这篇文章主要介绍了php – 如何使用__autoload从多个目录加载类?,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
function __autoload($class_name) { include AP_SITE."classes_1/class_".$class_name.".PHP"; } $connection = new database_pdo(DSN,DB_USER,DB_PASS); var_dump($connection);
结果,
object(database_pdo)[1] PRotected 'connection' => object(PDO)[2]
但这只从一个目录加载类,其他目录呢?因为我将类分组在不同的目录中.如果我想从其他目录加载类,我会得到错误,
function __autoload($class_name) { include AP_SITE."classes_1/class_".$class_name.".PHP"; include AP_SITE."classes_2/class_".$class_name.".PHP"; }
信息,
引用此行 – 包括AP_SITE.“classes_2 / class _”.$class_name.“.PHP”;
所以,我的问题是 – 如何使用__autoload从多个目录加载类?
可能的解决方案:
function autoload_class_multiple_directory($class_name) { # List all the class directories in the array. $array_paths = array( 'classes_1/','classes_2/' ); # Count the total item in the array. $total_paths = count($array_paths); # Set the class file name. $file_name = 'class_'.strtolower($class_name).'.PHP'; # Loop the array. for ($i = 0; $i < $total_paths; $i++) { if(file_exists(AP_SITE.$array_paths[$i].$file_name)) { include_once AP_SITE.$array_paths[$i].$file_name; } } } spl_autoload_register('autoload_class_multiple_directory');
spl_autoload_register
而不是单个__autoload函数注册多个自动加载功能.这是推荐的方式.
如果一个自动加载器能够加载该文件,则不会调用堆栈中的下一个.
但是,每个自动加载器只应加载它所用的类,因此您需要通过classname和/或is_file来检查它.通过classname通常会更好,因为如果应用程序增长,在文件系统上疯狂地尝试会给系统带来压力.
为了不重新发明轮子,您甚至可以使用已经存在的自动加载器,它能够在文件名调用上处理PSR-0标准.这些通常允许在基本目录上注册特定的命名空间.在您的情况下,这意味着您必须根据PSR-0 convention重命名和组织文件.
function __autoload($class_name) { $file = sprintf('%sclasses_1/class_%s.PHP',AP_SITE,$class_name); if (is_file($file)) { include $file; return; } $file = sprintf('%sclasses_2/class_%s.PHP',$class_name); if (is_file($file)) { include $file; return; } }
正如您所看到的,已经存在代码重复(在您的代码中).因此,这应该只是一个临时解决方案,因为您最终会为要测试的每个目录提供越来越多的重复行.如果您考虑更改设计,请考虑PSR-0 shema,它有助于简化一个代码库,并且可以轻松地重用PHP世界中的其他现有组件.
function autoload_class_multiple_directory($class_name) { # List all the class directories in the array. $array_paths = array( 'classes_1/','classes_2/' ); foreach($array_paths as $path) { $file = sprintf('%s%s/class_%s.PHP',$path,$class_name); if(is_file($file)) { include_once $file; } } } spl_autoload_register('autoload_class_multiple_directory');
以上是脚本宝典为你收集整理的php – 如何使用__autoload从多个目录加载类?全部内容,希望文章能够帮你解决php – 如何使用__autoload从多个目录加载类?所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。