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
相关产品推荐
相关产品推荐

