从多个目录自动加载类的最佳方法

时间:2013-04-30 18:07:32

标签: php

您好我正在尝试加载存储在不同目录中的类。 我尝试使用SPL,但我必须设置加载目录搜索的位置。

我的结构就像Zend fw:

  

| --root

     

| - 图书馆

     

| ----数据库[dir]

     

| --------- adapter.php

     

| --------- results.php

     

| -----注册表[DIR]

     

| --------- format.php

     

| --------- BLA-bla.php

     

| --index.php

function __autoload($class_name) 
{
    include LIB."database/".$class_name.".php";
    include LIB."registry/".$class_name.".php";
}

如何在没有definig的情况下从库(所有文件夹)自动加载全部包含LIB。“database /”,“registry”

1 个答案:

答案 0 :(得分:3)

您可以在类名中使用一些约定来帮助您破译它的位置。许多框架为此目的使用类名约定。

例如:

class diseases_autoimmune_lupus{

} 

然后您可以通过下划线字符explode() _自动加载功能中的类名,然后使用带有斜杠字符(implode())的/来构建相关文件的路径。

function __autoload($class_name){
  $classParts = explode('_',$class_name);
  $path = '/'.implode('/',$classParts) . '.php';
  include($_SERVER['DOCUMENT_ROOT'].$path);
}

在上一个示例中,lupus.php类位于站点根文件夹的diseases/autoimmune文件夹中。 /diseases/autoimmune/lupus.php