wuyiwai / 协程相关知识

Created Wed, 20 Nov 2024 00:00:00 +0000 Modified Tue, 04 Mar 2025 06:11:45 +0000

协程上下文思路

<?php
use Hyperf\Context\Context;

// 将 bar 字符串以 foo 为 key 储存到当前协程上下文中
$foo = Context::set('foo', 'bar');
// set 方法会再将 value 作为方法的返回值返回回来,所以 $foo 的值为 bar
<?php
use Hyperf\Context\Context;

// 从当前协程上下文中取出 key 为 foo 的值,如不存在则返回 bar 字符串
$foo = Context::get('foo', 'bar');
<?php
use Hyperf\Context\Context;

// 从当前协程上下文中判断 key 为 foo 的值是否存在
$foo = Context::has('foo');
<?php
use Psr\Http\Message\ServerRequestInterface;
use Hyperf\Context\Context;

// 从协程上下文取出 $request 对象并设置 key 为 foo 的 Header,然后再保存到协程上下文中
$request = Context::override(ServerRequestInterface::class, function (ServerRequestInterface $request) {
    return $request->withAddedHeader('foo', 'bar');
});
  • 替换类用 /class_map/xxx 来统一文件路径
  • 短生命周期对象 - make - 参考
  • 获取容器对象 - $container = \Hyperf\Context\ApplicationContext::getContainer(); -参考
  • 使用db实例 - $db = ApplicationContext::getContainer()->get(DB::class); - 参考