thinkphp 5.1 已彻底移除 import() 函数,推荐使用 psr-4 自动加载机制;5.0 中 import() 是全局函数,支持短名导入,5.1 中需通过 loader::addnamespace() 注册命名空间并 use 引入类。

ThinkPHP 5.0 和 5.1 的 import() 已被完全移除,5.1 要用 Loader::import() 或更推荐的自动加载机制;直接写 require/include 路径在两个版本里都容易出错,尤其跨模块时。
5.0 中还能用 import(),但 5.1 报 Call to undefined function import()
5.0 的 import() 是全局函数,支持短名导入(如 import('org.util.String') 对应 org/util/String.php),底层走的是 Think\Loader 的映射逻辑。5.1 开始该函数被彻底删除,连同 vendor/topthink/thinkphp/library/think/Loader.php 里的静态 import() 方法也一并下线。
- 5.0 可用:
import('org.util.RSA')→ 自动定位到org/util/RSA.php - 5.1 执行会报错:
Call to undefined function import() - 5.1 替代写法(不推荐):
\think\Loader::import('org.util.RSA'),但该方法本身也仅保留兼容,文档已标注“废弃”
5.1 推荐用 Loader::addNamespace() + use,而不是手动引入文件
5.1 强制转向 PSR-4 自动加载,所有类应通过命名空间 + use 声明调用,不再鼓励“按需引入单个 PHP 文件”。手动 require 绝对路径(如 require APP_PATH . 'common/function.php';)虽能跑通,但破坏自动加载、无法被 Composer 管理、热更新失效。
- 新增自定义命名空间(如把
extra/映射为Extra\):\think\Loader::addNamespace('Extra', EXTEND_PATH . 'extra' . DS); - 之后就能正常
use Extra\Wechat\Pay;,无需import或require - 注意:5.0 的
Loader::addNamespace()参数是['name' => 'path']数组,5.1 改为两个独立参数,顺序不能反
vendor/topthink/thinkphp/base.php 的加载时机差异影响 require_once 行为
5.0 的 base.php 在入口文件末尾才引入,此时常量(如 APP_PATH)已定义,require_once APP_PATH.'common/func.php' 通常安全;5.1 的 base.php 提前加载(在 define() 后立即引入),但部分扩展类(如 think\Validate)依赖自动加载器初始化——若你在 base.php 之前就 require 了含类定义的文件,可能触发 Class not found。
- 5.0:入口中
require 'base.php';在define('APP_PATH', ...)之后 →APP_PATH可用 - 5.1:入口中
require 'base.php';紧跟define()→APP_PATH可用,但Loader尚未注册全部命名空间 - 真正安全的做法:把非自动加载的工具函数统一放到
application/common.php(5.1 默认加载),或改造成带命名空间的类
实际迁移时最易忽略的是:5.0 里靠 import() 拆分的工具类,在 5.1 中必须补全命名空间声明 + use,否则即使文件存在也会报 Class not found ——不是路径问题,是自动加载器根本没注册那个前缀。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











