Hyperf框架中单例对象和短周期对象的获取方式

编程入门 行业动态 更新时间:2024-10-26 12:29:51

Hyperf框架中单例<a href=https://www.elefans.com/category/jswz/34/1771306.html style=对象和短周期对象的获取方式"/>

Hyperf框架中单例对象和短周期对象的获取方式

Hyperf 单例对象获取与短周期对象获取


hyperf官方文档中关于短生命周期对象的描述:
短生命周期对象
通过 new 关键词创建的对象毫无疑问的短生命周期的,那么如果希望创建一个短生命周期的对象但又希望使用 构造函数依赖自动注入功能 呢?这时我们可以通过 make(string $name, array $parameters = []) 函数来创建 $name 对应的的实例,代码示例如下:
$userService = make(UserService::class, [‘enableCache’ => true]);Copy to clipboardErrorCopied
注意仅 $name 对应的对象为短生命周期对象,该对象的所有依赖都是通过 get() 方法获取的,即为长生命周期的对象,可理解为该对象是一个浅拷贝的对象

容器仅管理长生命周期的对象
换种方式理解就是容器内管理的对象都是单例,这样的设计对于长生命周期的应用来说会更加的高效,减少了大量无意义的对象创建和销毁,这样的设计也就意味着所有需要交由 DI 容器管理的对象均不能包含 状态 值。
状态 可直接理解为会随着请求而变化的值,事实上在 协程 编程中,这些状态值也是应该存放于 协程上下文 中的,即 Hyperf\Utils\Context。

所以,
Make()函数实例化的为短生命周期对象,起底层为new instance。

$container->get()从容器中获取单例模式的对象。

测试demo如下:

public function handle() {
$container = ApplicationContext::getContainer();
$obj = $container->get(TmallService::class);

    var_dump('$obj',$obj->var);// string(4) "$obj" int(0)$obj->var = 6666;var_dump('$obj',$obj->var);// string(4) "$obj" int(6666)$object1 = make(TmallService::class);$obj2 = $container->get(TmallService::class);var_dump('$obj2',$obj2->var);die;// string(4) "$obj2"  int(6666)$object1 = make(TmallServiceInterface::class,['enableCache' => true]);var_dump('$object1->var',$object1->var);// string(4) "$object1->var" int(0)$object1->var = 666;var_dump('$object1->var',$object1->var);// string(4) "$object1->var" int(666)$object2 = make(TmallServiceInterface::class,['enableCache' => true]);var_dump('$object2->var',$object2->var);// string(4) "$object2->var" int(0)$object2->var = 999999;var_dump('$object2->var',$object2->var); die;// string(4) "$object2->var" int(999999)// var_dump( ODeliveryOrder::query()->whereIn('id',[])->toSql() );die;// $res =  make(OrderLogic::class)->updateDeliveryOrder([//     'o_delivery_order_id' => 1051485// ]);}

更多推荐

Hyperf框架中单例对象和短周期对象的获取方式

本文发布于:2024-03-10 15:12:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1728312.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:对象   周期   框架   方式   Hyperf

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!