packagon/fiber

Pagon 的依赖注入容器

0.3.0 2013-05-22 06:08 UTC

This package is not auto-updated.

Last update: 2024-09-14 13:47:35 UTC


README

Fiber 是一个基于 PHP5.3 的 依赖注入容器介绍

Fiber 在一些 API 上借鉴了 Pimple,但使用了对象调用方式

Fiber是该库的基础,与其不同之处在于Pagon\Fiber默认继承了EventEmitter,方便基于Fiber就能够有事件驱动。

依赖

  • PHP5.3+

安装

直接require文件

require_once '/path/to/Fiber.php';

使用 composer

添加

"pagon/fiber": "*"

composer.json 接着安装

composer.phar install

使用

创建空的容器

$dic = new Fiber();

创建带成员的容器

$dic = new Fiber(array(
    'db' => new Database();
));

例子

定义参数

使用对象成员赋值的方式来定义参数

$dic->db_host = 'localhost';
$dic->db_name => 'test';

使用对象成员调用的方式来获取

$db_host = $dic->db_host;

定义服务

使用对象成员赋值的方式来定义一个匿名函数作为服务

// $dic也会做为参数传入

$dic->random = function ($dic) {
    return random();
};

$dic->time = function ($dic) {
    return time();
};

使用的时候直接调用成员

$random = $dic->random;
$time = $dic->time;

注意

每次获取成员,函数都会被重新调用,所以不适合做数据库,缓存等需要连接资源的服务

定义共享服务

定义共享服务是指对给出的定义单例化,比较适合用来数据库对象等服务

// 标准方式
$dic->db = $dic->share(function ($dic) {
    return new Database($dic->db_host);
});

// 键名定义方式
$dic->share('db', function ($dic) {
    return new Database($dic->db_host);
});

使用

$db = $dic->db;

// 如果重新调用

$db1 = $dic->db // 这时候$db1和$db共享同一个数据库

自定义函数

自定义函数允许你配置一个自己可完全控制的函数,函数不会作为服务提供

// 标准定义
$dic->save = $dic->protect(function($key, $value){
    return $_SESSION[$key] = $value;
})

// 键名定义
$dic->protect('save', function($key, $value){
    return $_SESSION[$key] = $value;
})

使用

// 获取函数再调用
$save = $dic->save;
$save('test', 'value');

// 直接调用
$dic->save('test', 'value');

扩展服务

扩展服务允许对现有的服务进行加工,并返回新的服务

注意:只能使用键名的方式进行扩展,如果要想保持共享服务,扩展时也需要使用共享定义

$dic->extend('db', $dic->share(function ($db, $dic) {
    $db->select($dic->db_name);
    return $db;
}));

许可证

(MIT许可证)

版权 (c) 2012 hfcorriez <hfcorriez@gmail.com>

以下是对任何获得此软件及其相关文档文件(以下简称“软件”)副本的个人免费许可,允许个人在不限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向提供软件的个人提供这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论这些责任是基于合同、侵权或其他方式引起的,无论这些责任是否与软件或其使用或其它交易有关。