You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FlightPHP框架:shared instance是什么?两类实例运行有何差异?

理解FlightPHP中的Shared Instance及其与新实例的差异

Hey there! Let's break this down clearly so you get exactly what's going on here.

什么是Shared Instance?

在FlightPHP的语境里,shared instance(共享实例) 就是框架为指定类创建并维护的唯一对象实例。

当你第一次调用Flight::db()时,框架会初始化这个数据库类的对象,把它存到内部的容器里。之后不管你再调用多少次Flight::db(),框架都会直接返回这个已经存在的对象,不会再重新创建新的实例。这本质上是单例模式的一种实现,核心目的是让整个应用生命周期内,同一个类只存在一份实例。

两种实例的实际运行差异

接下来看看这两种实例在实际开发中的核心区别:

1. 资源与内存占用

  • 共享实例只会被创建一次,后续调用都是复用同一个对象,内存占用更低。对于数据库连接这种资源密集型的类来说,复用实例能避免频繁创建、销毁连接带来的性能损耗,这对应用性能提升很关键。
  • 每次调用Flight::db(false)都会生成一个全新的独立对象,多次调用会在内存中存在多个互不相关的对象,资源消耗会更高。

2. 状态的独立性

共享实例的状态是全局共享的,而新实例的状态完全独立:

// 共享实例的状态会被全局复用
$shared = Flight::db();
$shared->setConnectionTimeout(30); // 修改共享实例的连接超时

$anotherShared = Flight::db();
echo $anotherShared->getConnectionTimeout(); // 输出30,因为是同一个对象
// 新实例的状态完全独立
$newInstance1 = Flight::db(false);
$newInstance1->setConnectionTimeout(30);

$newInstance2 = Flight::db(false);
echo $newInstance2->getConnectionTimeout(); // 输出默认值,newInstance1的修改对它无影响

3. 适用场景

  • 共享实例:适合需要全局统一状态的场景,比如数据库连接、全局日志处理器、配置管理器——你肯定不希望每次操作数据库都新建连接,或者日志分散在多个实例里导致记录混乱。
  • 新实例:适合需要独立状态的场景,比如同时连接两个不同的数据库、创建多个独立的业务处理单元,每个实例可以配置不同的参数,互不干扰。

内容的提问来源于stack exchange,提问作者Mohammad Salehi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:38:05