试图理解PSR-4通过控制台应用程序自动加载.我做错了什么


Trying to understand PSR-4 autoloading through a console app. What am I doing wrong?

我试图通过编写一个非常基本的示例应用程序来理解PSR-4自动加载。

这是我的应用程序的(目录)结构:

app/ -library/auth/Author/AuthorInterface.php -library/auth/Author/Author.php -library/auth/Authorize/ -library/database/ -vendor/composer/ -vendor/autoload.php -composer.json -composer.lock -composer.phar -manager.php

我所要做的就是运行manager.php并让它从Author.php

返回语句

AuthorInterface.php:

namespace Vee'Auth'Author;
interface AuthorInterface
{
    public function write();
}

Author.php

namespace Vee'Auth'Author;
class Author implements AuthorInterface
{
    function __construct()
    {
        return "Hello";
    }
    public function write()
    {
        return "Hello.write";
    }
}

manager.php:

require "vendor/autoload.php";
use Vee'Auth'Author;
echo new Author();

composer.json:

{
    "autoload": {
        "psr-4": {
            "Vee''": "library/"
        }
    },
    "require": {
        "monolog/monolog": "^1.21"
    }
}

当我尝试运行manager.php:

时,我看到的错误是
$ php manager.php 
Fatal error: Class 'Vee'Auth'Author' not found in /<path-to-app>/manager.php on line 7

我已经运行了:

$ php composer.phar update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files

我错过了什么?

编辑:

我在Mac上运行PHP 5.5,如果这有什么区别-

$ php --version
PHP 5.5.36 (cli) (built: Jun 12 2016 23:47:46) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies

By psr- 42.6

所有的类名必须以区分大小写的方式引用。

和3.3

终止类名对应于以.php结尾的文件名。文件名必须与终止类名的大小写匹配。

尝试将auth重命名为Auth

更新:

刚刚注意到你在manager.php中的use语句是错误的。试一试:

require "vendor/autoload.php";
use Vee'Auth'Author'Author;
print (new Author())->write();

另外,即使从构造函数返回字符串,也不能回显类。