Pimple 容器使用

Pimple 容器使用Pimpl 是 php 社区中比较流行的容器 代码不是很多 详见 https github com silexphp Pimple 一个基于 Pimple 开发简单的例子 创建应用 phpnamespace TencentIm usePimple Container ClassTencent authoralways 302611431 co property Always TencentIm se

Pimpl是php社区中比较流行的容器。代码不是很多,详见 https://github.com/silexphp/Pimple

一个基于Pimple开发简单的例子:

  1. 创建应用
 
    namespace Always\TencentIm; use Pimple\Container; / * Class TencentIm * @author always <@.com> * * @property \Always\TencentIm\service\Account $account */ class TencentIm extends Container { 
     / * Service Providers. * 服务提供者列表 * @var array */ protected $providers = [ ServiceProviders\AccountServiceProvider::class, ]; / * TencentIm constructor. */ public function __construct($config) { 
     parent::__construct(); // 通用配置,可提供给服务初始化使用 $this['config'] = $config; $this->registerProviders(); } / * 注册服务提供者 * @param array $providers */ public function registerProviders() { 
     foreach ($this->providers as $provider) { 
     parent::register(new $provider()); } } / * Magic get access. * * @param string $id * * @return mixed */ public function __get($id) { 
     return $this->offsetGet($id); } / * Magic set access. * * @param string $id * @param mixed $value */ public function __set($id, $value) { 
     $this->offsetSet($id, $value); } } 
  1. 创建服务提供者
 
    namespace Always\TencentIm\ServiceProviders; use Pimple\Container; use Pimple\ServiceProviderInterface; use Always\TencentIm\service\Account; class AccountServiceProvider implements ServiceProviderInterface { 
     public function register(Container $pimple) { 
     !isset($pimple['account']) && $pimple['account'] = function ($pimple) { 
     // 服务使用了初始化传入的配置信息 return new Account($pimple['config']); }; } } 

服务提供者是连接容器与具体功能实现类的桥梁。服务提供者需要实现接口ServiceProviderInterface
所有服务提供者必须实现接口 register 方法,AccountServiceProvider服务提供者的注册方法会给容器增加属性account,但是返回的不是对象,而是一个闭包

  1. 应用使用
$config = []; $app = new TencentIm($config); $account = $app->account; 

这样就可以使用\Always\TencentIm\service\Account $account对象的方法了。

TencentIm构造函数需要使用 $this->registerProviders(); 对服务提供者进行了注册

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223799.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午1:24
下一篇 2026年3月17日 下午1:25


相关推荐

  • OpenClaw哪家模型商最具性价比?Kimi、阿里云月计划、Claude,主要写代码和数学推导?

    OpenClaw哪家模型商最具性价比?Kimi、阿里云月计划、Claude,主要写代码和数学推导?

    2026年3月14日
    2
  • F1 score,micro F1score,macro F1score 的定义

    F1 score,micro F1score,macro F1score 的定义本篇博客可能会继续更新最近在文献中经常看到precesion,recall,常常忘记了他们的定义,在加上今天又看到评价多标签分类任务性能的度量方法microF1score和macroF2score。决定再把F1score一并加进来把定义写清楚,忘记了再来看看。F1scoreF1score(以下简称F1)是用来评价二元分类器的度量,它的计算方法如下:F1&amp;ThickSpace;…

    2022年10月14日
    5
  • Gradle 15分钟入门教程

    1-Gradle入门介绍在阅读或实践本文中的实例前,必须首先确保已将Gradle插件安装到Eclipse中。如果没有,可以点击下面的链接查看Gradle安装说明: – http://www.yiibai.com/gradle/how-install-gradle-windows.html本教程的目标:这是项目完成后的代码结构图: 2-创建Gradle

    2022年4月4日
    44
  • 要慎用mysql的enum字段的原因

    要慎用mysql的enum字段的原因

    2021年6月14日
    135
  • 如何彻底的卸载anaconda(包括配置文件)

    如何彻底的卸载anaconda(包括配置文件)如果你想测地卸载anaconda,请看SolutionB。[官方参考链接]。1.SolutionA通常卸载软件,直接运行uninstall就可以了,对于anaconda也一样,可以直接运行安装目录下的Uninstall-Anaconda3.exe即可,但是这样卸载并没有完全卸载。如果需要完全卸载请参考SolutionB2.SolutionB通过B方式卸载,请确保还没有通…

    2022年6月18日
    222
  • ABP系列文章总目录

    ABP系列文章总目录ABP 系列文章总目录本系列的学习资料 采用的阳光铭睿博友的 做为学 ABP 框架的排头兵我按照 ABP 官方文档的结构大概列出了我准备写的文章系列 以后文章中的内容将会是部分为翻译部分为自己的经验和感受 这一系列文章也正好作为我团队新成员的培训教材 nbsp nbsp 背景介绍 有几次在技术交流会和上我提到 ABP 项目 几乎没有人知道这个开源项目 张善友 蟋蟀等不少朋友问过我 怎么在中文社区都搜不到 ABP 这个项目的介

    2026年3月20日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号