PHPackages                             reasno/lazy-loader - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. reasno/lazy-loader

ActiveLibrary

reasno/lazy-loader
==================

A lazy loader that plays nice with Hyperf DI.

0.1.0(6y ago)414MITPHPPHP &gt;=7.2

Since Nov 7Pushed 6y agoCompare

[ Source](https://github.com/Reasno/LazyLoader)[ Packagist](https://packagist.org/packages/reasno/lazy-loader)[ RSS](/packages/reasno-lazy-loader/feed)WikiDiscussions master Synced yesterday

READMEChangelog (1)Dependencies (6)Versions (2)Used By (0)

Hyperf懒加载器
==========

[](#hyperf懒加载器)

[![Build Status](https://camo.githubusercontent.com/5ac1c0964143d147fbfd36c75a4f37605d890d1edf6ec5ce5cf5981bd613f71d/68747470733a2f2f7472617669732d63692e6f72672f526561736e6f2f4c617a794c6f616465722e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/Reasno/LazyLoader)

Hyperf的长生命周期依赖注入在项目启动时完成。这意味着长生命周期的类需要注意：

- 构造函数时还不是协程环境，如果注入了可能会触发协程切换的类，就会导致框架启动失败。
- 构造函数中要避免循坏依赖（比较典型的例子为 `Listener` 和 `EventDispatcherInterface`），不然也会启动失败。

目前解决方案是：只在实例中注入 `ContainerInterface` ，而其他的组件在非构造函数执行时通过 `container` 获取。PSR-11中指出:

> 「用户不应该将容器作为参数传入对象然后在对象中通过容器获得对象的依赖。这样是把容器当作服务定位器来使用，而服务定位器是一种反模式」

也就是说这样的做法虽然有效，但是从设计模式角度来说并不推荐。

另一个方案是使用PHP中常用的惰性代理模式，注入一个代理对象，在使用时再实例化目标对象。本组件依赖Hyperf DI组件设计了基于类型提示（TypeHint）的懒加载注入功能。

安装
--

[](#安装)

```
composer require reasno/lazy-loader
```

实战
--

[](#实战)

下面这个例子会发生循环依赖：

```
