socialengine / unum
Unum:简单的实体实现
2.0.1
2015-09-10 15:20 UTC
Requires
- php: >=5.5.0
Requires (Dev)
- phpunit/phpunit: ^4.7
- socialengine/sniffer-rules: ^2.1
This package is not auto-updated.
Last update: 2024-09-14 17:53:35 UTC
README
安装
使用composer安装此包
$ composer require socialengine/setup-test-db
使用方法
创建一个扩展SocialEngine\Unum\Entity
的类,并具有受保护的属性
class MyEntity extends \SocialEngine\Unum\Entity { protected $name; protected $email; }
从那里,可以使用属性数组创建新实体
$entity = new MyEntity(['name' => 'Duke', 'email' => 'support@socialengine.com']);
访问属性
可以使用数组或对象语法访问属性
$entity = new MyEntity(['name' => 'Duke', 'email' => 'support@socialengine.com']); echo $entity->name; // Duke echo $entity['email']; // support@socialengine.com
访问尚未“加载”数据的属性将抛出InvalidArgumentException
。
通过定义形式为get{AttributeName}
的方法,实体将使用该方法返回属性值。
注意:snake_case属性将被转换为PascalCase用于方法,因此test_prop
变为getTestProp
class GetMethodEntity extends \SocialEngine\Unum\Entity { protected $name; protected function getName() { return $name . ' From Method!'; } } $entity = new GetMethodEntity(['name' => 'Hello']); var_dump($entity->name); // string(18) "Hello From Method!"
分配属性
可以使用数组或对象语法分配属性
$entity = new MyEntity(); $entity->name = 'My Name'; $entity['email'] = 'fake@example.com'; var_dump($entity->toArray()); /* array(2) { 'name' => string(4) "Duke" 'email' => string(24) "support@socialengine.com" } */
分配到不存在的属性将抛出InvalidArgumentException
。
通过定义形式为set{AttributeName}
的方法,实体将使用该方法设置属性值。
注意:snake_case属性将被转换为PascalCase用于方法,因此test_prop
变为setTestProp
class SetMethodEntity extends \SocialEngine\Unum\Entity { protected $name; protected function setName($value) { $this->name = $name . ' Set By Method!'; } } $entity = new SetMethodEntity(['name' => 'Hello']); var_dump($entity->name); // string(20) "Hello Set By Method!"
脏属性
如果将实体属性分配的值与其当前值不同,则会将该属性标记为“脏”。要检索实体的脏属性,请将true
作为$dirty
标志传递给toArray
$entity = new MyEntity(); $entity->name = 'My Name'; var_dump($entity->toArray(true)); /* array(1) { 'name' => string(7) "My Name" } */
可以使用clean
方法“清理”实体,该方法将从所有属性中删除“脏”标记。
$entity = new MyEntity(); $entity->name = 'My Name'; $entity->email = 'whatever'; $entity->clean(); var_dump($entity->toArray(true)); /* array(0) { } */
元属性
您可以设置和获取“元”属性 - 即没有直接附加属性的属性。
如果您有一个存储category_id
但不存储分类名称的实体,这很好
<?php require('vendor/autoload.php'); class MyEntity extends \SocialEngine\Unum\Entity { protected $category_id; protected $first_name; protected $last_name; protected function getCategoryName() { $categoryNamesMap = [ 1 => 'Awesome' ]; return $categoryNamesMap[$this->getProp('category_id')]; } /** * You can also set meta properties */ protected function setName($name) { list($firstName, $lastName) = explode(' ', $name, 2); $this->fromArray([ 'first_name' => $firstName, 'last_name' => $lastName ]); } } $entity = new MyEntity(['category_id' => 1]); var_dump($entity->categoryName); /* string(7) "Awesome" */ $entity['name'] = 'Duke Orcino'; var_dump($entity->toArray(true)); /* array(2) { 'first_name' => string(4) "Duke" 'last_name' => string(6) "Orcino" } */
上述实体将允许您通过正常语法访问元属性。使用内置的setProp
和getProp
,您可以利用Unum提供的某些验证和属性检查代码。
代码风格
请遵循以下指南和代码标准
PHP
Git
附录和说明
namespace
应与打开php标签在同一行:<?php namespace SocialEngine\Amazing
- 属性名应使用camelCase
- 测试名应使用下划线,而不是camelCase。例如:
test_cats_love_catnip
许可证
MIT.