我试图通过编写一个运行在控制台上的非常基本的示例应用程序来理解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
发布于 2016-09-27 07:42:29
按psr-4 2.6
所有类名必须以区分大小写的方式引用。
和3.3
终止类名对应于以.php结尾的文件名。文件名必须与终止类名的大小写匹配。
尝试将auth
重命名为Auth
。
更新:
只是注意到您在manager.php中的use语句是错误的。尝试:
require "vendor/autoload.php";
use Vee\Auth\Author\Author;
print (new Author())->write();
此外,即使在从构造函数返回字符串时,也不能回显类。
https://stackoverflow.com/questions/39718783
复制相似问题