最开始我是执行 composer init 创建的一个新项目,过程中会让你设置一些配置。
生成后的 composer.json 是下面这样的:
{
"name": "junwind/hide-and-seek",
"description": "基于swoole的捉迷藏小游戏",
"type": "project",
"require": {
"php": ">=7.4.0"
},
"license": "MIT",
"autoload": {
"psr-4": {
"Junwind\\HideAndSeek\\": "app/"
}
},
"authors": [
{
"name": "junwind"
}
],
"minimum-stability": "dev"
}
我们主要看这一段:
"psr-4": {
"Junwind\\HideAndSeek\\": "app/"
}
这里的意思是,我们项目中的app目录下的命名空间就是:
namespace Junwind\HideAndSeek;
但是我想换成这样:
namespace App; // 对于app目录的命名空间
于是我直接手动修改了composer.json :
"psr-4": {
"App\\": "app"
}
但是报错了:
Fatal error: Uncaught Error: Class 'App\Manager\Game' not found
网上搜索了一下,我们需要执行一下 composer dump-autoload
重新生成一下,执行后就不报错了。
我们来看下改完后app下的命名空间:
假如我现在目录结构是这样的
app
Manager
Game.php
Model
Player.php
那么 Player.php 这个类文件中的命名空间是:
<?php
namespace App\Model;
class Player{
}
如果我们的 Game.php 需要调用 Player.php 中的方法:
<?php
namespace App\Manager;
use App\Model\Player;
class Game {
public function __construct() {
$player = new Player();
}
}