jgswift / persistr
PHP 5.5+ 轻量级持久化层
0.1.1
2014-06-02 12:59 UTC
Requires
- php: >=5.5
- jgswift/kfiltr: dev-master
- jgswift/qtil: dev-master
Requires (Dev)
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2024-09-28 15:12:26 UTC
README
PHP 5.5+ 轻量级持久化层
安装
通过 Composer 安装
php composer.phar require jgswift/persistr:dev-master
用法
persistr 是一个轻量级的 PHP 包,它实现了一个松散的持久化层。
persistr 在定义模型时不一定使用注解或其他类型的模型元数据。然而,这并不妨碍包含一个正式的建模组件。
此外,persistr 模型可以完全依赖任何数据源事务。将平台依赖的代码放入持久化接口实现通常是不良的实践。这样的代码只适用于模型本身。
persistr 假设你知道如何与你的相应数据源交互,并且不是一个完全的数据库抽象层。
persistr 根据签名标准(如特质的呈现、接口的存在或仅仅是单个类名本身)区分对象持久化实现。
当将持久化应用于单个类时,所有继承的类默认自然具有相同的扩展。
以下是一个使用接口/特质对签名(接口是默认的区分元素)的空白模型的默认示例。
<?php class MyUser implements persistr\Interfaces\Persistent { use persistr\Persistent; } $user = new MyUser; $model = $user->getModel(); $model->bind('foo',function() { return 'bar'; }); $value = $user->foo; var_dump($value); // returns 'bar'
在上述类上不需要指定接口,因为只需要特质就可以识别签名。有多个识别技术可用,即 trait
、interface
和 class
。
以下是设置基于类的自定义持久化接口的示例。
首先,我们定义一个模型类、输入/输出过滤器,最后将其注册到持久化层。
// MODEL CLASS class MyUserModel implements persistr\Interfaces\Model { private $className; private static $registry; function __construct($className) { $this->className = $className; if(empty(self::$registry)) { self::$registry = new persistr\Object\Registry($this,$className); } } public function getClassName() { return $this->className; } public function getRegistry() { return self::$registry; } public function bind($attribute, callable $callable=null) { persistr\Object\Binding\Registry::bind(self::$registry->getTypeName(), $attribute, $callable); return $this; } public function bindTo($object,$attribute,callable $callable=null) { persistr\Object\Binding\Registry::bindTo($object, $attribute, $callable); return $this; } } // PERSISTENCE REGISTRATION $persistor = new persistr\Persistor('MyUser'); persistr\Registry::register($persistor); $model = new MyUserModel('MyUser'); $persistor->getDataSource()->insert('MyUser',$model);
现在,当实例化 MyUser 对象时,将使用给定的 MyUserModel 模型来映射对象。