Search by

bain2018 / framework

bain2018

基于 ThinkPHP 5.0.26 的 PHP 8.2+ 兼容维护分支

Package info

github.com/bain2018/thinkphp5

Homepage

Type:bain2018-framework

pkg:composer/bain2018/framework

Statistics

Installs: 1 613

Dependents: 1

Suggesters: 0

Stars: 1

Open Issues: 0

5.0.38 2026-09-20 03:50 UTC

This package is auto-updated.

Last update: 2026-09-20 04:01:43 UTC


README

本仓库是 ThinkPHP 5.0.26 的维护分支,目标运行环境为 PHP 8.2+。保留 ThinkPHP 5 的目录结构和公共调用方式,不迁移到其他框架版本。

PHP 8 兼容与验证

  • 本地验证 PHP 8.2、8.4、8.5;PHP 8.3 已列入 CI 矩阵,本地未运行。未来 PHP 版本不作未经测试的兼容承诺。
  • 修复内置接口返回类型兼容、反射参数绑定、可空参数、Session 驱动及 PHP 8.5 废弃语法。错误报告保持 E_ALL
  • 移除仅供旧测试工具使用的过时开发依赖;改用无第三方依赖的隔离回归套件。原 phpunit.xml 引用的测试目录并不存在,现以以下命令为准。
composer install
composer validate --strict
php tests/lint.php
composer test
# 也可直接指定 PHP 版本运行,不要求先安装开发依赖
/path/to/php8.2 tests/run.php

测试覆盖全框架类加载、启动/路由/异常响应、核心参数绑定及独立模块回归。测试使用临时目录、本地子进程和隔离数据,不读取业务项目配置、不调用生产数据库或外部缓存服务。语法检查会将编译期弃用提示也视为失败。

兼容边界:

  • 内置接口适配在需要保留下游子类方法签名时使用 #[\ReturnTypeWillChange];这不等于关闭全局弃用报告。业务子类仍应显式声明自己的属性,并检查自定义接口覆盖。
  • SQLite2、Xcache、Wincache 等历史可选缓存驱动依赖已过时扩展,保留原来的显式“不支持”错误,不自动迁移数据;PHP 8 应使用可用的 File、Redis 等驱动。PDO SQLite 数据库驱动与旧 SQLite2 缓存驱动是不同模块。
  • MySQL/PostgreSQL/SQL Server、Redis/Memcache/Memcached 的真实服务、Windows 子进程和业务项目联调需要部署环境单独验收。框架测试通过不代表业务应用或生产发布通过。
  • 最低 PHP 版本声明提升至 8.2;低于该版本的应用请保留原框架版本。上线前在业务项目更新依赖并回归,回滚时恢复原框架及依赖版本;本次不涉及数据库迁移。

PHP 官方迁移依据:8.2 动态属性8.4 隐式可空参数8.5 废弃项

原版框架说明

ThinkPHP5在保持快速开发和大道至简的核心理念不变的同时,PHP版本要求提升到5.4,优化核心,减少依赖,基于全新的架构思想和命名空间实现,是ThinkPHP突破原有框架思路的颠覆之作,其主要特性包括:

  • 基于命名空间和众多PHP新特性
  • 核心功能组件化
  • 强化路由功能
  • 更灵活的控制器
  • 重构的模型和数据库类
  • 配置文件可分离
  • 重写的自动验证和完成
  • 简化扩展机制
  • API支持完善
  • 改进的Log类
  • 命令行访问支持
  • REST支持
  • 引导文件支持
  • 方便的自动生成定义
  • 真正惰性加载
  • 分布式环境支持
  • 支持Composer
  • 支持MongoDb

本维护分支要求 PHP 8.2 以上;下文保留原版目录与开发文档说明。

详细开发文档参考 ThinkPHP5完全开发手册 以及ThinkPHP5入门系列教程

目录结构

初始的目录结构如下:

www  WEB部署目录(或者子目录)
├─application           应用目录
│  ├─common             公共模块目录(可以更改)
│  ├─module_name        模块目录
│  │  ├─config.php      模块配置文件
│  │  ├─common.php      模块函数文件
│  │  ├─controller      控制器目录
│  │  ├─model           模型目录
│  │  ├─view            视图目录
│  │  └─ ...            更多类库目录
│  │
│  ├─command.php        命令行工具配置文件
│  ├─common.php         公共函数文件
│  ├─config.php         公共配置文件
│  ├─route.php          路由配置文件
│  ├─tags.php           应用行为扩展定义文件
│  └─database.php       数据库配置文件
│
├─public                WEB目录(对外访问目录)
│  ├─index.php          入口文件
│  ├─router.php         快速测试文件
│  └─.htaccess          用于apache的重写
│
├─thinkphp              框架系统目录
│  ├─lang               语言文件目录
│  ├─library            框架类库目录
│  │  ├─think           Think类库包目录
│  │  └─traits          系统Trait目录
│  │
│  ├─tpl                系统模板目录
│  ├─base.php           基础定义文件
│  ├─console.php        控制台入口文件
│  ├─convention.php     框架惯例配置文件
│  ├─helper.php         助手函数文件
│  ├─tests/             PHP 8 兼容回归测试
│  └─start.php          框架入口文件
│
├─extend                扩展类库目录
├─runtime               应用的运行时目录(可写,可定制)
├─vendor                第三方类库目录(Composer依赖库)
├─build.php             自动生成定义文件(参考)
├─composer.json         composer 定义文件
├─LICENSE.txt           授权说明文件
├─README.md             README 文件
├─think                 命令行入口文件

router.php用于php自带webserver支持,可用于快速测试 切换到public目录后,启动命令:php -S localhost:8888 router.php 上面的目录结构和名称是可以改变的,这取决于你的入口文件和配置参数。

命名规范

ThinkPHP5的命名规范遵循PSR-2规范以及PSR-4自动加载规范。

参与开发

注册并登录 Github 帐号, fork 本项目并进行改动。

更多细节参阅 CONTRIBUTING.md

版权信息

ThinkPHP遵循Apache2开源协议发布,并提供免费使用。

本项目包含的第三方源码和二进制文件之版权信息另行标注。

版权所有Copyright © 2006-2018 by ThinkPHP (http://thinkphp.cn)

All rights reserved。

ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。

更多细节参阅 LICENSE.txt