繁体   English   中英

PHP:通过 PSR-4 自动加载说 class 未找到

[英]PHP: Autoloading via PSR-4 is saying class not found

我试图在我的 src 文件夹DependencyContainer中使用 class ,但它说 class 找不到?

指数:

<?php
$dc = new \Mango\DependencyContainer();

文件结构:

src/
    DependencyContainer.php
index.php
composer.json

作曲家.json:

{
    "name": "mqwerty/ioc-container",
    "type": "library",
    "require": {},
    "autoload": {
        "psr-4": {
            "Mango\\": "src/"
        }
    }
}

依赖容器 class:

<?php

declare(strict_types = 1);

namespace Mango;

class DependencyContainer
{
}

首先,您需要像这样在索引中添加自动加载文件

require __DIR__ . '/vendor/autoload.php';

而你的index.php会像这样

<?php

require __DIR__ . '/vendor/autoload.php';

$dc = new \Mango\DependencyContainer();

它会解决你的问题

自动加载不只是自动发生; composer 设置为根据composer.json的 PSR 设置来管理 PSR 自动加载的创建和更新。

在 CLI 中composer install 这将根据您的composer.json在供应商文件夹中生成自动加载文件并创建一个composer.lock文件,即使您没有任何依赖项。

从那里,您需要在执行代码之前引导自动加载文件。

嘿,这已经解决了很多次,但我还是会解释一下,以防你不理解其他问题。

所以我也遇到过这个问题,你可以在我的个人资料上找到它。

psr 根据您的路径工作。 当你设置你的 src 路径时,它就是从那里开始的,

例如,您的布局类似于以下内容:

vendor 
  your-vendor-name
    your-package
      src
        App.php
        Class.php
      composer.json

那么你的 psr 位置应该有这个: “/src”

之前应该是这样的:

“您的供应商名称\您的包裹\”

when using a class, make sure you composer class names start with an uppercase letter and the class inside matches the file name, make sure the class namespaces are something like this \your-vendor-name\your-package

并使用


$app = new \your-vendor-name\your-package\(then the class name you want to use, so lets say, Class.php, then you would put Class() here)

希望这可以解决您的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM