通用/通用

dev-master / 2.0.x-dev 2017-09-10 22:35 UTC

This package is auto-updated.

Last update: 2024-08-29 03:15:58 UTC


README

Universal是一个通用的PHP库。

Build Status Coverage Status

安装

composer require universal/universal 2.0.x-dev

组件

  • 类加载器
  • 容器
  • HTTP请求

类加载器

基本路径类加载器

$loader = new BasePathClassLoader( array( 
    'vendor/pear', 'external_vendor/src'
) );
$loader->useEnvPhpLib();
$loader->register();

包含路径操作器

包含路径操作器

$includer = new PathIncluder(array( 'to/path', ... ));
$includer->add( 'path/to/lib' );
$includer->setup();   // write set_include_path

HTTP

StreamResponse

MXHR支持

$response = new Universal\Http\StreamResponse;
for( $i = 0 ; $i < 30000 ; $i++ ) {
    $response->write(json_encode(array('i' => $i)), array(
        'Content-Type' => 'application/json',
    ));
    usleep(200000);
}
$response->finish();

HttpRequest

针对多个文件

<?php

$req = new HttpRequest;
foreach( $req->files as $f ) {
    $extname = $f->getExtension();
    $filename = $f->getPathname();
}

$req->param( 'username' );   // get $_REQUEST['username'];

$req->get->username;    // get $_GET['username'];

$req->post->username;   // get $_POST['username'];

$req->server->path_info;  // get $_SERVER['path_info'];

获取FILE

$req = new HttpRequest;

获取$_FILES['uploaded']哈希值

$req->files->uploaded;

获取文件大小

$req->files->uploaded->size;

获取文件MIME类型

$req->files->uploaded->type; // plain/text

获取上传错误

$req->files->uploaded->error;

遍历文件

foreach( $req->files->uploaded as $f ) {
    $f->size;
}

对象容器

构建$container对象或继承自它

$container = new Universal\Container\ObjectContainer;

注册对象构建器以进行懒构建。

$container->mailer = function() {
    return new YourMailer;
};

通过__get魔术方法获取单例对象

$mailer = $container->mailer;

或从instance方法获取单例对象

$mailer = $container->instance('mailer');

构建新对象

$mailer = $container->build('mailer');

使用参数构建新对象

$mailer = $container->build('mailer', array( ... ));

会话

支持的会话存储后端

  • Memcache
  • Redis
  • 本地

使用对象容器传递选项

$container = new Universal\Container\ObjectContainer;
$container->state = function() {
    return new Universal\Session\State\NativeState;
};
$container->storage = function() {
    return new Universal\Session\Storage\NativeStorage;
};

本地会话

$session = new Universal\Session\Session(array(  
    'state'   => new Universal\Session\State\NativeState,
    'storage' => new Universal\Session\Storage\NativeStorage,
));
$counter = $session->get( 'counter' );
$session->set( 'counter' , ++$counter );
echo $session->get( 'counter' );

带有Memcache后端的会话

$session = new Universal\Session\Session(array(  
    'state'   => new Universal\Session\State\CookieState,
    'storage' => new Universal\Session\Storage\MemcacheStorage,
));
$counter = $session->get( 'counter' );
$session->set( 'counter' , ++$counter );
echo $session->get( 'counter' );

事件

use Universal\Event\EventDispatcher;

$e = Event::getInstance();

// register your handler
$e->register('test', function($a, $b, $c) {
    // do what you want
});

// trigger event handlers
$e->trigger('test', 1,2,3);