【发布时间】:2016-10-21 23:36:35
【问题描述】:
这是我第一次使用 Composer,我有点想弄清楚为什么它没有拾取我的命名空间。
在我的project/ 目录中:
├── composer.json
├── composer.lock
├── composer.phar
├── README.md
├── vendor (truncated)
└── src
├── Config.php
├── Handler.php
└── Router.php
src/Config.php
<?php
$project_root = realpath(__DIR__ . '/..');
$autoload = $project_root . '/vendor/autoload.php';
?>
src/Router.php
<?php namespace Project\Router;
include_once("Config.php");
require $autoload;
use Project\Handler;
Hello::world();
?>
src/Handler.php
<?php namespace Project\Handler;
include_once("Config.php");
require $autoload;
class Hello {
public function world() {
echo "Hello world!";
}
}
?>
composer.json
{
"autoload": {
"psr-4": {
"Project\\": "src"
}
}
}
http://127.0.1.1/project/src/Router.php:
致命错误:未捕获的错误:在 /path/to/project/src/Router.php:38 中找不到类“Project\Router\Hello”:38(不是实际行)堆栈跟踪:#0 {main} throw in / path/to/project/src/Router.php 在第 38 行(不是实际行)
我能够使用外部依赖项,所以我的一般 Composer 设置似乎没问题。我只是不知道我在哪里搞砸了我自己的命名空间。
【问题讨论】:
-
只是为了好玩,你试过用
\Project\Handler\Hello::world();代替use吗? -
@Machavity 是的,我肯定有。同样的错误。
标签: php namespaces composer-php autoload