jgswift/xral

PHP 5.5+ 资源抽象层

0.1.2 2014-09-05 05:00 UTC

This package is not auto-updated.

Last update: 2024-09-28 14:03:29 UTC


README

PHP 5.5+ 资源抽象层

Build Status Scrutinizer Code Quality Latest Stable Version License Coverage Status

安装

通过命令行使用 composer 安装

php composer.phar require jgswift/xral:0.1.*

通过 composer.json 使用 composer 安装

{
    "require": {
        "jgswift/xral": "0.1.*"
    }
}

描述

xral 是一个相对简单的包,提供了使用 XML、YML 和 INI 文件格式查询数据的一致方式。xral 包含 3 个查询类,分别用于从和向每个资源读取和写入。xral 还包含 3 个适配器和视图类,为更具体的实现提供基础。xral 依赖于 kfiltr 插件来自定义对查询结果执行过滤和映射过程。xral 查询返回 qinq 集合,以便轻松启用进一步的面向对象级别的转换

依赖关系

用法

XML

SimpleXML

基本

$query = new XML\Simple();

$query->select('//book')
      ->from('library.xml')
      ->where('authors/author','Stephen King');

$result = $query();

var_dump($result); // qinq\Collection [ SimpleXMLElement, SimpleXMLElement, ... ]

更新

$file = new qio\File('library.xml');

$query = new XML\Simple();

// set the author of a specific book
$query->select('library/books/book')
      ->update($file)
      ->set('author','Stephen King')
      ->where('name','The Langoliers');

$query();

插入

$file = new qio\File('library.xml');

$query = new XML\Simple();
            
$query->select('/library/books')
      ->update($file)
      ->insert(['book' => [
          'name' => 'The Catcher In The Rye',
          'authors' => [
              'author' => 'J. D. Salinger'
          ],
          'ISBN' => '0316769533 9780316769532',
          'publisher' => 'Amazon',
          'pages' => 277
      ]]);

$query();

删除

$file = new qio\File('library.xml');

$query = new XML\Simple();

$query->delete('//book')
      ->update($file)
      ->where('name','The Catcher In The Rye');

$query();

DOMDocument

基本

$query = new XML\DOM();

$query->select('//book')
      ->from('library.xml')
      ->where('authors/author','Stephen King');

$result = $query();

var_dump($result); // qinq\Collection [ DOMElement, DOMElement, ... ]

更新

$file = new qio\File('library.xml');

$query = new XML\DOM();

$query->select('library/books/book')
      ->update($file)
      ->set('author','Stephen King')
      ->where('name','The Langoliers');

$query();

插入

$file = new qio\File('library.xml');

$query = new XML\DOM();
            
$query->select('/library/books')
      ->update($file)
      ->insert(['book' => [
          'name' => 'The Catcher In The Rye',
          'authors' => [
              'author' => 'J. D. Salinger'
          ],
          'ISBN' => '0316769533 9780316769532',
          'publisher' => 'Amazon',
          'pages' => 277
      ]]);

$query();

删除

$file = new qio\File('library.xml');

$query->delete('//book')
      ->update($file)
      ->where('name','The Catcher In The Rye');

$query();

INI

基本

$query = new INI\Query();
            
$query->section('general')
      ->from('config.ini')
      ->where('debug',0);

$result = $query();

var_dump($result); // qinq\Collection [ array, array, ... ]

更新

$file = new qio\File('config.ini');

$query = new INI\Query();

// update debug setting in general section to 1
$query->update($file)
      ->section('general')
      ->set('debug',1);

$query();

插入

$file = new qio\File('config.ini');

$query->update($file)
      ->section('general')
      ->insert('name','My Application');

$query();

删除

$file = new qio\File('config.ini');

$query = new INI\Query();
            
$query->update($file)
      ->section('general')
      ->delete('name');

$query();

YML

基本

$query = new YML\Query();

$query->select('product')
      ->from('invoice.yml')
      ->where('quantity',1);

$result = $query();

var_dump($result); // qinq\Collection [ array, array, ... ]

更新

$query = new YML\Query();

$query->select('product')
      ->update('invoice.yml')
      ->where('sku','BB5280R')
      ->set('quantity',5);

$query();

插入

$query = new YML\Query();
            
$query->select('product')
      ->update('invoice.yml')
      ->insert([
          'sku' => 'BB5280R',
          'quantity' => 6,
          'description' => 'Baseball Glove',
          'price' => 50
      ]);

$query();

删除

$query = new YML\Query();

$query->delete('product')
      ->update('invoice.yml')
      ->where('sku','BB5280R');

$query();

JSON

查询

$query = new JSON\Query();

$query->select(function($person) {
            return $person['firstName'].' '.$person['lastName']
      })
      ->from('people.json')
      ->where(function($person) {
            return ($person['money'] > 5000) ? true : false;
      });

$result = $query();

var_dump($result); // qinq\Collection [ [ 'name' => 'john doe' ], [ 'name' => 'billy bob' ] ]

更新

$file = new qio\File('people.json');

$query = new JSON\Query();

// change a persons firstname from 'billy' to 'bob'
$query->update($file)
      ->set('firstName','bob')
      ->where(function($person) {
          return ($person['firstName'] == 'billy') ? true : false;
      });

$query();

插入

$file = new qio\File('people.json');

$query = new JSON\Query();
            
$query->update($file)
      ->insert([
          'firstName' => 'jane',
          'lastName' => 'doe',
          'gender' => 'female',
          'money' => 50000
      ]);

$query();

删除

$file = new qio\File('people.json');

$query = new JSON\Query();
            
$query->update($file)
      ->delete()
      ->where('gender','female');

$query();