uuf6429 / php-castable
PHP类型转换功能
2.0.0
2024-06-02 16:19 UTC
Requires
- php: ^8
Requires (Dev)
- ergebnis/composer-normalize: ^2.7
- friendsofphp/php-cs-fixer: ^3.3
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^9 || ^10 || ^11
- roave/security-advisories: dev-latest
README
PHP类型转换的基本基础。
🔌 安装
推荐并最简单的方式安装此库是通过Composer。
composer require uuf6429/php-castable
⭐️ 特性 / 功能
- 与简单类型和对象一起工作
cast($value, $type)
函数将值转换为目标类型。Castable
接口,当在实现此接口的对象上调用cast()
时,会公开方法。- 错误处理 - 所有错误都路由到
NotCastableException
。 - 修复了IDE对PHPDoc泛型的类型提示。
虽然 cast()
只是一个常规PHP函数,但它相当于其他语言中的类型转换运算符(例如 val as Type
、(Type)val
、val.to(Type)
、CAST(val, TYPE)
...)。
🚀 示例
class Cat implements \uuf6429\Castable\Castable { public function castTo($type) { if ($type === Dog::class) { return new Dog(); } throw new RuntimeException("Unsupported type $type."); } } class Dog {} $dog = \uuf6429\Castable\cast(new Cat(), Dog::class); // ok, cat becomes a dog :) $cat = \uuf6429\Castable\cast($dog, Cat::class); // not allowed
🔍 转换行为
转换过程遵循以下步骤
- 如果值是所需类型的对象或值,则返回未更改的值。
- 如果值是实现了
Castable
接口的 对象,则调用castTo()
并返回其值。 - 否则,尝试PHP的
settype()
。
在任何时候,都可能发生错误或不受支持的类型转换,在这种情况下将抛出 NotCastableException
。
💰 动机
在许多情况下,在类中具有特定的 castToX()
方法就足够了,并且通常工作得很好。
然而,这可能会变得非常重复且容易出错,直到需要更动态的解决方案。此包有助于安全地避免所有这些样板代码。