自动加载器从它不应该知道的目录中加载文件

时间:2018-09-17 09:27:39

标签: php

我一直在尝试PHP自动加载,但遇到了无法解释的行为。我的目录结构如下:

  .
  ├── src
  │   ├── main.php
  │   └── Program.php
  └── vendor
      ├── autoload.php
      └── Company
          └── LibName
            └── Lib.php

我用来调用主入口点main.php的工作目录是src。这是我的main.php:

<?php

require_once '../vendor/autoload.php';

var_dump(get_include_path());

$p = new Program();
$l = new \Company\LibName\Lib();

这是我非常简单的自动加载器:

<?php

spl_autoload_register(function ($class) {
    $file = str_replace('\\', '/', $class) . '.php';
    #echo "checking " . $file . "\n";
    #if (file_exists($file)) {
        echo "including " . $file . "\n";
        include $file;
    #}
});

当我在带有PHP 7.0的CLI上运行main.php时,我希望它会引发错误,因为它不能包含类Lib的文件。但是,没有这样的错误,输出只是:

string(16) ".:/usr/share/php"
checking Program.php
including Program.php
constructed program
checking Company/LibName/Lib.php
including Company/LibName/Lib.php
constructed lib

奇怪的是,当我仅在main.php中提供这样的相对名称空间时,这甚至可以工作:

$l = new Company\LibName\Lib();

当我启用检查文件是否在我的自动加载器中时,代码将引发预期的错误,因为没有包含发生。但是我仍然无法解释上述行为。有人有答案吗?

0 个答案:

没有答案