hyperf 遇到的情况总结

楼主已经转go,不再更新

协程

变量

 public const const = 1000;

    public static $static;

    
    public function setvar()
    {
        $this->var = 'var';
        self::$static = 'static';
        Context::set('testvar', '1000');

        return [
            'context' => Context::get('testvar'),
        ];
    }

    public function getvar()
    {
        return [
            'var' => $this->var,
            'static' => self::$static,
            'const' => self::const,
            'context' => Context::get('testvar', 'no'),
        ];
    }

像这种,全局定义的变量,静态属性,是所有协程共享的
但是,协程上下文,是协程隔离的

注解注入坑

突然报:must not be accessed before initialization

   /**
     * @Inject
     * @var SourceTypeNewService
     */
    private  $sourceTypeNewService;
  • runtime 删掉重起就行

启动

启动没扫描文件

遇到一个坑,很坑,深坑,start启动后不扫描文件,然后导致最新的文件没没改变。

注意!注意!注意!
查看是否,继承类出了问题

hyperf 因为协程,类实例化最好还是用,make()

报没有input()

这通常是,runtime文件没有更新,或者git分支切换。
可以删掉runtime重新启动

内存常驻

构造函数实例化类bug

    public function __construct()
    {
        if ($this->sourceTypeNewService === null || $this->base === null) {
            $this->sourceTypeNewService = new SourceTypeNewService();
            $this->base = new Base();
        }
    }

像这样,构造函数,实例化类,在php-fpm模式下,每次都会断开,然后重新连接,执行构造函数,拿到实例化。

但是,swoole是常驻内存,不会断开,所以$this -> model 使用类,会很容易有变量污染。

  • 错误,swoole worker工作模式,也是类似fpm 也是会每次都链接

继承

为了测试,继承是否和变量一样会有污染,所以做了一下代码测试

父类:trytest

<?php

namespace App\Controller;

class trytest
{
    
    public static function index(){
        
    }
    
    public static function indexWithDate($date=''):string{}
    

    public function getIndex(){
        
        $data = 'nothing';
        if (static::index()){
            $data = static::index();
        }
        if (static::indexWithDate()){
            $data = static::indexWithDate();
        }
        return [
            'msg'=>$data,
            'code'=>333
        ];
    }
}

两个测试子类
testa:

<?php

namespace App\Controller;

class testa extends trytest
{
    public static function indexWithDate($date = ''): string
    {
        return 'this is testa';
    }


    public function get(){
        return $this->getIndex();
    }
}

返回:
{
    "msg": "this is testa",
    "code": 333
}

testb:

<?php

namespace App\Controller;

class testb extends trytest
{

    public static function indexWithDate($date = ''): string
    {
        return 'this is testbbbbb';
    }

    public function get(){
        return $this->getIndex();
    }
}
返回:
{
    "msg": "this is testbbbbb",
    "code": 333
}

由此可见,继承是隔离的,不会有污染,想想也是。。。。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hyperf 是一个基于 PHP 的高性能微服务框架,它是由 Hyperf 开发团队基于 Swoole 扩展开发的。Hyperf 框架具有轻量级、高性能、灵活可扩展等特点,适用于构建各种类型的微服务应用。 以下是 Hyperf 微服务框架的一些特点和功能: 1. 高性能:Hyperf 基于 Swoole 扩展,充分利用了 Swoole 的协程特性和异步非阻塞的 IO 模型,提供了卓越的性能表现。 2. 轻量级:Hyperf 框架本身非常轻量级,核心代码量少,运行时内存占用低,可以快速启动和运行。 3. 灵活可扩展:Hyperf 提供了丰富的组件和扩展机制,可以根据项目需求进行灵活的定制和扩展。 4. 支持多种协议:Hyperf 支持 HTTP、WebSocket、TCP、UDP 等多种协议,可以满足不同类型的微服务应用需求。 5. 强大的依赖注入容器:Hyperf 内置了一个强大的依赖注入容器,可以方便地管理和注入各种组件和服务。 6. 高度可测试性:Hyperf 提供了丰富的测试工具和测试支持,可以方便地进行单元测试和集成测试。 7. 支持分布式部署:Hyperf 支持分布式部署,可以通过配置中心、服务注册与发现等机制实现微服务的高可用和负载均衡。 8. 提供丰富的组件:Hyperf 提供了许多常用的组件,如数据库 ORM、缓存、消息队列、验证器等,可以快速开发各种类型的微服务应用。 总之,Hyperf 是一个功能强大、性能优越的 PHP 微服务框架,适用于构建高性能、可扩展的微服务应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值