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

本文探讨了Hyperf框架中如何管理和使用单例与短生命周期对象。重点介绍了make()函数创建短生命周期对象的方法及应用场景,并通过实例演示了容器get()方法获取单例对象的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
    // ]);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值