本地目录自动加载 - “未找到类”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了本地目录自动加载 - “未找到类”相关的知识,希望对你有一定的参考价值。

我在这里有一种精神错乱,我必须遗漏一些东西。我有一个web目录,有两个库作为兄弟目录:

/
  web/
    vendor/
      composer/
        autoload_psr4.php
        ...
      autoload.php
    index.php
  lib-one/
    src/
      A.php
  lib-two/
    src/
      B.php

类文件:

A.php

<?php

namespace OrgLibOne;

class A
{

    public function __construct()
    {

    }

}

B.php

<?php

namespace OrgLibTwo;

class B
{

    public function __construct()
    {

    }

}

我运行composer update,它会生成预期的vendor/composer/autoload_psr4.php文件:

vendor/composer/autoload_psr4.php

<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'Org\LibOne\' => array($baseDir . '/../lib-one/src'),
    'Org\LibTwo\' => array($baseDir . '/../lib-two/src'),
);

最后,在web目录中我有一个索引文件,其中包含以下代码:

index.php

<?php

include('vendor/autoload.php');

use OrgLibOneA;
use OrgLibTwoB;

$a = new A();
$b = new B();

$a被分配了一个A的实例就好了,而$b错误,说Class 'OrgLibTwoB' not found in 'web/index.php line 9'

唯一的区别是我在使用OrgLibTwo的代码已经运行后添加了OrgLibOne

我有五重检查拼写,命名空间,目录等。请帮助我恢复理智。

答案

解决了!当然,这是一个简单但经常被忽视的解决方案。在我们的例子中,我们使用vagrant开发框rlerdorf/php7dev。文件php7dev.yaml包含目录映射,我忘了添加lib-two,并且过于专注于Composer是问题的根源。

以上是关于本地目录自动加载 - “未找到类”的主要内容,如果未能解决你的问题,请参考以下文章

已加载 PDO 和 pdo_mysql 但未找到类

分享前端开发常用代码片段

收藏|分享前端开发常用代码片段

关于js----------------分享前端开发常用代码片段

Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段

微信小程序代码片段