Composer PSR-4自动加载“找不到类”调试 - php

是的,有关“找不到类”错误的另一个问题。我丢失了某些东西,或者我误解了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 { }

如果包含文件存在问题,则意味着您必须注意三件事:

路径和文件名
文件中使用的命名空间
文件中使用的类名(类名应与文件名相同)

PHP Count数组元素 - php

嗨,有人可以解释为什么这会返回“数组由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…