[TOC]
### 作用域
我们在容器中注册的对象可能会有多种作用域,不同作用域表示的对象的生命周期不同
#### 1.默认作用域
默认注册到容器内的对象都是单例,对象在整个容器内只会有一个
>[info]注意下 swoole 不同worker进程内对象会不同,这里很有可能会一个worker进程里一个对象,但是你可以理解为就一个,问题不大的
#### 2.WorkerScope woker
如果一个类 实现了 WorkerScope接口 ,那么它的作用域就是整个 worker 进程,和上面的单例的生命周期基本相同
不同的是默认单例创建后不可以重新创建新的,但是WorkerScope的实例是可以的
调用下面方法后 ,所有WorkerScope作用域的对象会在下次使用时创建新的对象
~~~
worker_scope_change()
~~~
#### 3.RequestScope
如果一个类 实现了 RequestScope接口 ,那么它的作用域就是当前请求(协程)
相同的请求(协程)注入的对象是相同的,不同的请求(协程)注入对象是不同的;
#### 3.SessionScope
如果一个类 实现了 SessionScope接口 ,那么它的作用域就是整个 session
同一个session下是相同的,不同的 session 是不同的,对象需要支持序列化和反序列化;
#### 5.PrototypeScope
每次注入都会产生一个新的对象
### 使用注意
#### 1.ScopeProperty
WorkerScope,RequestScope,SessionScope除了实现接口外,在注入时也是需要注意的;
对应的类必须 use ScopeProperty 的trait
同时对应属性不能直接在类中定义,只能在类文件注释中通过 @property 注解对应属性;不然会变成默认的单例了;
具体代码如下:
~~~
/**
* 微信小程序接口
*
* @property WeixinMiniService $weixinMiniService
* @author: 藤之内
*/
class MiniAppController
{
use ScopeProperty;
//这里不对定义 $weixinMiniService 属性
/**
* MinniAppController __construct.
*
* @param $weixinMiniService
*/
public function __construct(WeixinMiniService $weixinMiniService)
{
$this->weixinMiniService = $weixinMiniService;
}
}
~~~
#### 2. PrototypeScope
PrototypeScope如何也使用了ScopeProperty 那么相对于同一个类,每次请求都是不一样的对象,不同的的类中也是不一样的
如果在类属性中定义了对应的对象,相对于同一个类是同一个对象,相对于不同的类是不同的对象;
#### 3. spl_object_hash
关于对象是否是同一个 大家可以使用php 的spl_object_hash函数进行验证,每个对象该函数会产生对应的 hash 值
- 序言
- 开始
- 安装 RapPhp
- 应用目录
- 配置文件
- 入口类
- MVC架构
- 控制器基础
- 前置方法
- 拦截器
- 动态路由
- Request和Response
- Cookie和Session
- 模板引擎
- 请求缓存
- 流程图
- 数据库
- 基础使用
- 查询语法
- 查询操作
- where
- order
- limit
- lock
- fields
- join
- distinct
- having
- group
- force
- 查询方法
- 多数据源
- 数据库类型
- Record模型
- 使用Record
- 增删改
- 查找方法
- 数据类型
- 基本类型
- JSON 数据类型
- time
- date
- attach
- const
- 迭代操作
- record 更多方法
- 注入与转json
- 多级缓存
- 多数据源
- 模型生成
- 回调事件
- IOC控制反转
- Ioc基础概念
- 依赖注入
- Scope作用域
- 构造器
- 循环依赖
- AOP面向切面
- AOP使用
- 切面
- AopBuild
- 生成 aop 文件
- 事件勾子
- 执行循序
- Swoole
- Http服务器
- 用户进程
- Context上下文(重要)
- 协程
- 特色功能
- 限流器
- 连接池
- 数据库连接池
- Redis 连接池
- 通用连接池
- Rpc 远程调用
- Rpc服务提供方
- Rpc客户端
- 熔断器与服务降级
- Redis 分布式锁
- 其他功能
- 缓存
- redis
- 文件存储
- 存储简介
- 本地存储
- OSS存储
- 配置
- 日志
- 验证器
- FileUtil
- 数组Util
- Http工具
- 多语言
- 命令行
- 使用命令行
- 生成模型文件
- AOP动态文件生成
- swoole_http服务器
- 自定义命令行
- 异常与调试
- 异常抛出
- 异常处理
- 部署
- URL重写
- DOCKER 镜像(重要)
- 附录
- 回调事件
- 开发规范
- Swoole开发注意点
- 热点行更新排队机制
