本地目录自动加载 - “未找到类”
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是问题的根源。
以上是关于本地目录自动加载 - “未找到类”的主要内容,如果未能解决你的问题,请参考以下文章
关于js----------------分享前端开发常用代码片段
Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段