cloudcreativity / utils-value
用于处理PHP中标准标量值的库。
v2.2.0
2022-03-04 18:09 UTC
Requires
- php: ^7.1.3|^8.0
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^7.0|^8.0|^9.0
This package is auto-updated.
Last update: 2024-09-04 23:55:23 UTC
README
cloudcreativity/utils-value
一个用于处理具有实际意义的标量值的小型库。
值
在应用程序中处理具有特定意义的标量值是很常见的。例如,如果应用程序中的对象期望一个只能是一组几个不同字符串值的字符串 - 例如,用于描述舞蹈角色的 lead
、follow
- 则任何期望这些值的对象都必须始终检查接收到的字符串是否匹配这两个选项。例如
public function setRole($value) { if (!in_array($value, ['lead', 'follow'])) { throw new \InvalidArgumentException('Expecting a valid dance role.'); } // ... }
这会变得非常重复 - 此外,如果您想添加 either
作为有效值,您需要更新应用程序中所有 in_array()
调用。
这就是我们会使用此包中的 CloudCreativity\Utils\Value\AbstractValue
类的地方。例如
use CloudCreativity\Utils\Value\AbstractValue; class DanceRole extends AbstractValue { protected function accept($value): bool { return in_array($value, ['lead', 'follow'], true); } }
上面的原始设置器将变成
public function setRole(DanceRole $role) { // no need to check it as we know it is valid. }
辅助方法
我们经常发现,对于值对象来说,拥有辅助方法是很有用的。通过在值对象上实现这些方法,它们就可以在任何接收值对象实例的应用程序部分中使用。
例如,DanceRole
对象可能看起来像这样
class DanceRole extends AbstractValue { public function isLead(): bool { return $this->is('lead'); } public function isFollow(): bool { return $this->is('follow'); } // ... }
特质
如果您不想扩展抽象类,大多数方法都通过 ValueTrait
提供。
接口
此包定义了一个接口,ValueInterface
,以确保值对象之间的一致性
__toString()
:以便标量值始终可以写入字符串。toString()
:以便标量值可以流畅地转换为字符串。jsonSerialize()
:以便在JSON编码时始终正确地转换标量值。get()
:获取基础标量值,例如,如果值对象包含字符串,将返回字符串。is(...$values)
:将提供的值与基础标量值进行比较,如果值与它们中的任何一个匹配,则返回true
。