我有问题加载包我需要通过composercomposer require package
PHP (version 5.6
)说它不识别这个包。
当查看脚本时,我在autoload_real.php
中发现了这些行:
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php';
call_user_func(ComposerAutoloadComposerStaticInitb5ab90658915f56241dbbea020198264::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
$loader->set($namespace, $path);
}
$map = require __DIR__ . '/autoload_psr4.php';
echo "<br>";
var_dump($map);
foreach ($map as $namespace => $path) {
$loader->setPsr4($namespace, $path);
}
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
}
我的包在autoload_psr4.php
文件中列出,并在包数组中返回,但代码将进入if子句($useStaticLoader为真),而在autoload_static.php
中,我的包未列出。
当将$useStaticLoader
设置为false时,else子句将按预期加载我的包。
我将添加我正在安装的包声明自己为psr4
包。
静态标志是什么意思,我如何使我的包在autoload_static.php
数组中列出?
允许选择禁用静态自动加载器
静态自动加载器在以下环境中提出了一个问题pre-PHP需要5.6语法兼容性。许多项目都有自动化的CI,在存储库中的所有文件上运行筛选器以防止避免开发人员不小心引入不兼容的语法。虽然静态自动加载器在较低的PHP版本中可以正确地保护自己还会绊倒皮屑。考虑到这方面的漏洞,这似乎是一个常见的设置:#5255,#5316,#5324和#5407。
这为dump- autolload命令添加了一个——no-static选项将通过更新autoload_real.php来禁用静态自动加载器不查找文件,如果存在则删除autoload_static.php。
您也可以使用--optimize-autoloader
标记install/update来避免此问题。
注::我在php 5.6中也有同样的问题,检查你的路径和命名空间两次!