我试图通过编写一个非常基本的示例应用程序来理解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();
另外,即使从构造函数返回字符串,也不能回显类。