Vác*_*mer 4 php namespaces autoload psr-4
当我使用 psr-4 自动加载时,我在使用 Composer 自动加载时遇到问题,它不起作用并给我错误。
我试过:
$ composer dump-autoload
还有很多其他的东西,但没有它就行不通
require one;
错误:
You are now a master builder, that knows how to autoload with a 
classmap! 
Fatal error: Uncaught Error: Class 'VegithemesLibraryGreeting' not 
found in /home/vaclav/Server/vssk/VSSK/project/aldemo/index.php:10 
Stack trace: #0 {main} thrown in 
/home/vaclav/Server/vssk/VSSK/project/aldemo/index.php on line 10
作曲家.json:
{
"autoload": {
    "files": ["mylibrary/functions.php"],
    "classmap": [
    "classmap"
    ],
    "psr-4": {
        "one\\": "src/"
    }
  }
}
greeting.php(带有要加载的类的文件):
<?php
namespace one;
Class Greeting
{
    public function hi()
    {
        return "We got you covered";
    }
}
index.php 文件:
<?php
require 'vendor/autoload.php';
echo lego();
$cm = new Cmautoload;
echo $cm->classmap();
$vt = new oneGreeting;
echo $vt->hi();
将类名的第一个字母大写通常是一种很好的做法。它还符合PSR-1的规则。
将您的 composer.json 文件更改为如下所示:
{
"autoload": {
    "files": [
        "mylibrary/functions.php"
    ],
    "classmap": [
        "classmap"
    ],
    "psr-4": {
        "One\\": "src/"
    }
  }
}
现在,在您的索引文件中。我们将导入自动加载器。要做到这一点,只需要它:
require 'vendor/autoload.php';
现在您已经包含了自动加载器,进入每个类并设置命名空间。
你src/== 中的类namespace One;
检查您的类src/并确保它们都是命名空间的。这意味着它们都应该在顶部有以下代码行:
namespace One;
如前所述,将您的文件名Foo.php和类名更新为
class Foo以遵守 PSR。(这不是必需的,但强烈推荐和标准程序。)
要使用您的课程之一,您会说 use One\Greeting;
$greeting = new Greeting();
echo $greeting->hi(); //"We got you covered"