0

当我执行以下代码时:

// autoload classes
spl_autoload_register(function($class) {
    require_once("$class.php");
});

它适用于与脚本位于同一目录中的所有类。但是,位于另一个目录中的任何类都将无法加载。以下解决方案有效:

define('ABSOLUTE_PATH', "/var/www/application");

// autoload classes
spl_autoload_register(function($class) {
    // class directories
    $dir = array(ABSOLUTE_PATH,
                 ABSOLUTE_PATH . '/models');

    foreach($dir as $path) {
        $file = sprintf('%s/%s.php', $path, $class);
        if(is_file($file)) {
            require_once($file);
        }
    }
});

但这感觉很丑。我读过你可以使用命名空间,但我似乎无法让它或其他任何东西工作。有人可以向我展示一个更优雅的解决方案,如果存在的话,我不必对目录路径进行硬编码?

4

2 回答 2

1

为了自动加载类,您可以在https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md使用 PSR-0 标准

SplClassLoader 的要点位于此处https://gist.github.com/221634

于 2013-01-12T15:26:37.387 回答
0

是的。您可以使用 spl_autoload_register 从多个目录自动加载类。这包括带有命名空间的类。:)

6行代码,包括括号:

spl_autoload_register(function ($class) {

   $file = str_replace('\\', '/', $class) . '.php';

   if(file_exists($file)) {

      require_once $file;

   } // end if

});

试试看,如果有什么我可以帮忙的,请告诉我。

干杯:)

于 2018-04-06T00:32:01.073 回答