gong023 / turmeric-spice
此包的最新版本(0.2.9)没有可用的许可证信息。
0.2.9
2023-08-29 07:03 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- fabpot/php-cs-fixer: 1.*
- gong023/assert_chain: 0.1.0
- mockery/mockery: 0.9.*
- phpunit/phpunit: 4.8.*
- satooshi/php-coveralls: dev-master
README
TurmericSpice 是一个受 MagicSpice 启发的库。
为 getter/setter 提供类语法糖。
安装
通过 composer
composer require gong023/turmeric-spice
基本用法
定义
use TurmericSpice\ReadableAttributes; class User { use ReadableAttributes { mayHaveAsInt as public getId; mayHaveAsString as public getName; mayHaveAsFloat as public getBalance; mayHaveAsBoolean as public getRestricted; mayHaveAsArray as public getFriendIds; } public function getCreated() { return $this->attributes->mayHave('created')->asInstanceOf('\\Datetime'); } }
实例化和使用
$user = new User([ 'id' => 1, 'name' => 'Taro', 'balance' => 100.0, 'restricted' => false, 'friend_ids' => [2, 3, 4], 'created' => '2015-01-01 00:00:00', ]); $user->getId(); // 1 $user->getName(); // 'Taro' $user->getBalance(); // 100.0 $user->getRestricted; // false $user->getFriendIds(); // [2, 3, 4] $user->getCreated(); // new \Datetime('2015-01-01 00:00:00') casted automatically. $user->toArray(); // return array which contains above values.
如果你想使用 setter,使用 TurmericSpice\ReadWriteAttributes
特性。
use TurmericSpice\ReadWriteAttributes; class User { use ReadWriteAttributes { setValue as public setId; setValue as public setName; mayHaveAsInt as public getId; mustHaveAsString as public getName; } } $user = new User(['id' => null]); $user->setId(1); $user->getId(); // 1 $user->setName('Taro'); $user->getName(); // 'Taro'
可能或必须
TurmericSpice 有两个 DSL,may
和 must
。
如果构造函数中给出了可空值,may
将指定类型进行转换,而 must
将抛出 \TurmericSpice\Container\InvalidAttributeException
。
use TurmericSpice\ReadableAttributes; class User { use ReadableAttributes { mayHaveAsString as public getName; mayHaveAsFloat as public getBalance; mustHaveAsInt as public getId; mustHaveAsArray as public getFriendIds; mustHaveAsBoolean as public getRestricted; } } $user = new User([ 'name' => null, 'balance' => 100, 'id' => null, 'restricted' => 'false', ]); $user->getName(); // return ''. casted automatically. $user->getBalance(); // return 100.0. casted automatically. $user->getId(); // If you give null(able), you will get InvalidAttributeException. $user->getFriendIds(); // If key is not defined, you will get InvalidAttributeException. $user->getRestricted(); // return false. casted automatically.
高级用法
获取原始值
use TurmericSpice\ReadableAttributes; class User { use ReadableAttributes; public function getIdRaw() { return $this->attributes->mayHave('id')->value(); } public function getRawArray() { return $this->attributes->getRaw(); } } $user = new User(['id' => '1']); $user->getIdRaw(); // return '1'. $user->getRawArray(); // return ['id' => '1']
获取指定类型的数组
你可以表达 int[]
、float[]
、bool[]
和 YourClass[]
。
use TurmericSpice\ReadableAttributes; class User { use ReadableAttributes { mayHaveAsIntArray as public getFriendIds; mayHaveStringArray as public getFriendNames; mustHaveAsFloatArray as public getBalanceHistories; } public function getUpdatedHistories() { return $this->attributes->mayHave('updated_histories')->asInstanceArray('\\Datetime'); } } $user = new User([ 'friend_ids' => ['1', '2', '3'], 'friend_names' => ['name1', 'name2', null], 'balance_histories' => [10.0, 20.0, null], 'updated_histories' => ['2015-01-01 00:00:00', '2016-01-01 00:00:00'], ]); $user->getFriendIds; // return [1, 2, 3] $user->getFriendNames; // return ['name1', 'name2', ''] $user->balanceHistories(); // throw exception. $user->getUpdatedHistories(); // return [new Datetime('2015-01-01 00:00:00'), new Datetime('2016-01-01 00:00:00')]
验证
use TurmericSpice\ReadableAttributes; class User { use ReadableAttributes; public function getOneOrZero() { return $this->attributes->mayHave('id')->asInteger(function ($value) { return $value === 1; }); } public function getOne() { return $this->attributes->mustHave('id')->asInteger(function ($value) { return $value === 1; }); } } $user = new User(['id' => 2]); $user->getOneOrZero(); // return 0. $user->getOne(); // throws exception.
更多示例
如果你想知道更多,请查看 示例和测试用例。
IDE 友好
与 MagicSpice 一样,TurmericSpice 也是 IDE 友好的。