PHP使用命名空间和内置类进行自动加载

时间:2016-08-09 09:12:47

标签: php spl-autoload-register

我使用以下代码段自动加载我的php类

spl_autoload_register(function ($path) {
    $path = strtolower(str_replace('\\', '/', $path));
    require_once "./$path.class.php";
});

现在我正在使用我这样的课程use Core\ClassA as ClassA;use ABC\ClassBBC as ClassBBC,它的工作非常完美。

但是当我想创建php内置类mysqli的新实例时,我收到以下警告:

Warning: require_once(./mysqli.class.php): failed to open stream: No such file or directory in /var/www/html/projectA/autoloader.php on line 9

无论我的自动加载器如何,如何强制自动加载器加载mysqli

1 个答案:

答案 0 :(得分:1)

这里有几件事:

  • 首先,您应该在使用file_exists
  • 之前检查该文件是否存在
  • 第二,不要通过" ./"开始你的要求。您应该只使用绝对路径。您可以在此处了解原因:PHP - Failed to open stream : No such file or directory
  • 第三,您无需使用require_once。自调用自动加载器后,您可以确定该文件尚未包含在内。而且require_一次比要求慢。

在任何情况下,你的自动加载器被调用mysqli的事实意味着以前没有找到它,所以这很奇怪。由于您提到您正在使用遗留代码,因此您可能还需要重新注册默认的自动加载器。