PHP 怎么PHP项目结构范例

wen PHP项目 2

本文目录导读:

PHP 怎么PHP项目结构范例

  1. 📁 基础项目结构
  2. 📝 代码示例
  3. 🔧 项目配置示例
  4. 🌟 最佳实践建议
  5. 🚀 推荐框架
  6. 📌 小项目简单结构

我来给你一个规范的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' => '',
        ],
    ],
];

🌟 最佳实践建议

  1. 保持目录结构清晰:每层有明确职责
  2. 使用Composer管理依赖:便于版本控制
  3. 遵循PSR-4自动加载:统一命名空间规范
  4. 环境配置分离:使用.env文件管理配置
  5. 入口文件统一:所有请求通过index.php
  6. 分离业务逻辑:使用Service层处理业务
  7. 配置缓存:生产环境启用配置缓存

🚀 推荐框架

如果想直接使用现成的框架,推荐:

  • Laravel:功能最全,适合大型项目
  • Symfony:企业级框架,组件丰富
  • ThinkPHP:国内流行,适合快速开发
  • Yii2:高性能,适合大型应用
  • CodeIgniter:轻量简单,适合小型项目

📌 小项目简单结构

如果项目很小,可以使用简化版:

project/
├── config.php        # 配置
├── index.php         # 入口
├── controllers/      # 控制器
├── models/           # 模型
├── views/            # 视图
├── helpers/          # 辅助函数
├── assets/           # 静态资源
└── vendor/           # 第三方库

这种结构适合快速开发和中小型项目,清晰直观易于维护。

项目结构最重要的是可读性和可维护性,根据团队习惯和项目规模灵活调整,不必生搬硬套。

抱歉,评论功能暂时关闭!