是的,有关“找不到类”错误的另一个问题。我丢失了某些东西,或者我误解了PSR-4逻辑。
我的作曲家库目录结构:
“扫描仪” =>“ src” =>“ Test.php”
Test.php
namespace MyNS;
class Test
{
}
composer.json
"autoload": {
"psr-4": {
"MyNS\\": "src/"
},
}
因此,现在我使用composer将库加载到我的项目中,然后尝试使用它。
require_once("../vendor/autoload.php");
$test = new MyNS\Test();
这总是导致
“致命错误:未捕获的错误:找不到类'MyNS \ Test'。”
。我想念什么?我现在正盯着这几天。我更改了文件夹,更改了文件夹名称,更改了uppper的值,反之亦然。似乎没有任何作用。
我正在使用PHP 7.2.2和Composer版本1.2.2
甚至尝试过这个:
require_once("../vendor/autoload.php");
use MyNS\Test;
$scanner = new Test();
更新资料
我调试了Composer ClassLoader.php文件(findFileWithExtension($ class,$ ext))方法,显然我的文件从未加载过,因为我收到了回声“ Done”和die();。在此方法的末尾,这意味着找不到文件,因此未加载文件。我的composer.json有什么问题?
{
"name": "test/test",
"type": "library",
"description": "",
"keywords": ["php"],
"homepage": "",
"license": "MIT",
"authors": [
{
"name": "",
"email": "",
"homepage": "",
"role": ""
}
],
"require": {
"php": ">=7.2.2"
},
"autoload": {
"psr-4": {
"MyNS\\": "src/"
}
}
}
参考方案
要调试正在打开的ClassLoader.php
文件,然后转到定义了findFileWithExtension()
方法的地方添加echo
语句:
# vendor/composer/ClassLoader.php:386
foreach ($this->prefixDirsPsr4[$search] as $dir) {
if (file_exists($file = $dir . $pathEnd)) {
return $file;
}
// Add this line
echo $file, PHP_EOL;
}
手动修改以上文件后,请不要执行composer dumpautoload
,直到完成。
现在,通过执行您的PHP文件,您将在输出的开始看到类似的内容:
path/to/project/vendor/composer/../../src/Test.php
这是:
path/to/project/src/Test.php
这是作曲家正在寻找的文件,其中应包含以下内容:
namespace MyNS;
class Test { }
如果包含文件存在问题,则意味着您必须注意三件事:
路径和文件名
文件中使用的命名空间
文件中使用的类名(类名应与文件名相同)
嗨,有人可以解释为什么这会返回“数组由0个元素组成”。 :$arr = array(1,3,5); $count = count($arr); if ($count = 0) { echo "An array is empty."; } else { echo "An array has $count elements.…
从缓存加载作曲家 - php我在使用composer安装/卸载laravel中的某些依赖项时遇到问题,这些依赖项从composer.json删除并删除了他们的供应商文件夹后又回来了,我最初使用dflydev的markdown包,但现在我想将其更改为michelf的php-markdown,但是我无法卸载旧版本,因为它是从缓存中重新加载的,我在AppData\Roaming\Compos…
PHP:从函数返回值并直接回显它? - php这可能是一个愚蠢的问题,但是……的PHPfunction get_info() { $something = "test"; return $something; } html<div class="test"><?php echo get_info(); ?></div> 有没有办…
PHP:将数据从二维数组复制到一维数组的最快方法 - php我有一个巨大的二维PHP数组,带有500万行。$t = [ [ "id" => 1, "name" => "foo" ], [ "id" => 2, "name" => "bar" ] ]; 现在,我必须将此数组的I…
php-printf和sprintf具有不同的输出 - php我编写了以下微型php程序来测试printf和sprintf:<?php $str_1 = printf("%x%x%x", 65, 127, 245); $str_2 = sprintf("%x%x%x", 65, 127, 245); echo $str_1 . "\n"; echo $s…