本文目录导读:

我来给你一个规范的PHP项目结构范例,这是目前业界比较推荐的实践方式:
📁 基础项目结构
project-root/
├── app/ # 应用核心代码
│ ├── Controllers/ # 控制器
│ ├── Models/ # 模型
│ ├── Views/ # 视图
│ ├── Middleware/ # 中间件
│ ├── Services/ # 服务层
│ ├── Repositories/ # 数据仓库
│ └── Helpers/ # 辅助函数
│
├── config/ # 配置文件
│ ├── app.php # 应用配置
│ ├── database.php # 数据库配置
│ └── routes.php # 路由配置
│
├── database/ # 数据库相关
│ ├── migrations/ # 迁移文件
│ └── seeds/ # 种子数据
│
├── public/ # Web根目录(唯一对外暴露)
│ ├── index.php # 入口文件
│ ├── assets/ # 静态资源
│ │ ├── css/
│ │ ├── js/
│ │ └── images/
│ └── .htaccess # Apache配置(或nginx配置)
│
├── resources/ # 资源文件
│ ├── views/ # 视图模板
│ ├── lang/ # 语言文件
│ └── assets/ # 未经编译的资源
│
├── routes/ # 路由定义
│ └── web.php # Web路由
│
├── storage/ # 存储文件
│ ├── logs/ # 日志
│ ├── cache/ # 缓存
│ └── uploads/ # 上传文件
│
├── tests/ # 测试文件
│ ├── Unit/ # 单元测试
│ └── Feature/ # 功能测试
│
├── vendor/ # Composer依赖
│
├── .env.example # 环境变量示例
├── .env # 环境变量(不提交到git)
├── composer.json # Composer配置
├── artisan # 命令行工具(Laravel)
└── README.md
📝 代码示例
入口文件 (public/index.php)
<?php // 定义应用的加载器 require_once __DIR__ . '/../vendor/autoload.php'; // 加载环境配置 $dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/../'); $dotenv->load(); // 启动应用 $app = new App\Core\Application(); // 注册路由 $app->registerRoutes(); // 运行应用 $app->run();
Composer配置 (composer.json)
{
"name": "yourname/yourproject",
"type": "project",
"require": {
"php": "^8.0",
"monolog/monolog": "^3.0",
"vlucas/phpdotenv": "^5.4"
},
"require-dev": {
"phpunit/phpunit": "^9.5"
},
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\": "database/"
}
},
"scripts": {
"test": "phpunit",
"dev": "php -S localhost:8000 -t public"
}
}
MVC示例
Controller (app/Controllers/UserController.php):
<?php
namespace App\Controllers;
use App\Models\User;
use App\Services\UserService;
class UserController
{
private $userService;
public function __construct(UserService $userService)
{
$this->userService = $userService;
}
public function index()
{
$users = $this->userService->getAllUsers();
return view('users.index', ['users' => $users]);
}
public function show($id)
{
$user = $this->userService->getUserById($id);
return view('users.show', ['user' => $user]);
}
public function store(Request $request)
{
$data = $request->validate();
$this->userService->createUser($data);
return redirect('/users');
}
}
Model (app/Models/User.php):
<?php
namespace App\Models;
use App\Core\Database\Model;
class User extends Model
{
protected $table = 'users';
protected $fillable = [
'name',
'email',
'password'
];
protected $hidden = [
'password'
];
public function posts()
{
return $this->hasMany(Post::class);
}
}
View (resources/views/users/index.php):
<!DOCTYPE html>
<html>
<head>用户列表</title>
</head>
<body>
<h1>用户列表</h1>
<table>
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>邮箱</th>
</tr>
</thead>
<tbody>
<?php foreach ($users as $user): ?>
<tr>
<td><?php echo $user->id; ?></td>
<td><?php echo $user->name; ?></td>
<td><?php echo $user->email; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</body>
</html>
环境配置 (.env.example)
# 应用配置 APP_NAME="Your App" APP_ENV=local APP_DEBUG=true APP_URL=http://localhost # 数据库配置 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=your_database DB_USERNAME=root DB_PASSWORD= # 缓存配置 CACHE_DRIVER=file SESSION_DRIVER=file # 邮件配置 MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=your_email@gmail.com MAIL_PASSWORD=your_password
🔧 项目配置示例
config/database.php
<?php
return [
'default' => 'mysql',
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'database'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
],
],
];
🌟 最佳实践建议
- 保持目录结构清晰:每层有明确职责
- 使用Composer管理依赖:便于版本控制
- 遵循PSR-4自动加载:统一命名空间规范
- 环境配置分离:使用
.env文件管理配置 - 入口文件统一:所有请求通过
index.php - 分离业务逻辑:使用Service层处理业务
- 配置缓存:生产环境启用配置缓存
🚀 推荐框架
如果想直接使用现成的框架,推荐:
- Laravel:功能最全,适合大型项目
- Symfony:企业级框架,组件丰富
- ThinkPHP:国内流行,适合快速开发
- Yii2:高性能,适合大型应用
- CodeIgniter:轻量简单,适合小型项目
📌 小项目简单结构
如果项目很小,可以使用简化版:
project/
├── config.php # 配置
├── index.php # 入口
├── controllers/ # 控制器
├── models/ # 模型
├── views/ # 视图
├── helpers/ # 辅助函数
├── assets/ # 静态资源
└── vendor/ # 第三方库
这种结构适合快速开发和中小型项目,清晰直观易于维护。
项目结构最重要的是可读性和可维护性,根据团队习惯和项目规模灵活调整,不必生搬硬套。