联合类型转换
可以混合使用基本类型和对象类型
对象层级匹配。对于多个对象类型,会选择最匹配的类型。支持继承层级的智能匹配
动态类型处理,自动处理不同类型的,输入提供更加灵活的数据建模方式
use Astral\Serialize\Serialize;
// 定义一个基础用户类
class User extends Serialize {
public string $name;
public int $age;
}
// 定义一个管理员用户类
class AdminUser extends User {
public string $role;
}
class FlexibleData extends Serialize {
// 支持整数或字符串类型的标识符
public int|string $flexibleId;
// 支持用户对象或整数标识符
public User|int $userIdentifier;
// 支持多种复杂的联合类型
public AdminUser|User|int $complexIdentifier;
}
// 场景1:使用整数作为 flexibleId
$data1 = FlexibleData::from([
'flexibleId' => 123,
'userIdentifier' => 456,
'complexIdentifier' => 789
]);
$data1Array = $data1->toArray();
// $data1Array 的内容:
// [
// 'flexibleId' => 123,
// 'userIdentifier' => 456,
// 'complexIdentifier' => 789
// ]
// 场景2:使用字符串作为 flexibleId
$data2 = FlexibleData::from([
'flexibleId' => 'ABC123',
'userIdentifier' => [
'name' => '张三',
'age' => 30
],
'complexIdentifier' => [
'name' => '李四',
'age' => 25
]
]);
echo $data2->userIdentifier; // 输出 User 对象
echo $data2->complexIdentifier; // 输出 User 对象
$data2Array = $data2->toArray();
// $data2Array 的内容:
// [
// 'flexibleId' => 'ABC123',
// 'userIdentifier' => User Object (
// ['name' => '张三', 'age' => 30]
// ),
// 'complexIdentifier' => User Object (
// ['name' => '李四', 'age' => 25]
// )
// ]
// 场景3:使用管理员用户
$data3 = FlexibleData::from([
'flexibleId' => 'USER001',
'userIdentifier' => [
'name' => '王五',
'age' => 35,
'role' => 'admin'
],
'complexIdentifier' => [
'name' => '赵六',
'age' => 40,
'role' => 'super_admin'
]
]);
echo $data2->userIdentifier; // 输出 User 对象
echo $data2->complexIdentifier; // 输出 AdminUser 对象
$data3Array = $data3->toArray();
// $data3Array 的内容:
// [
// 'flexibleId' => 'USER001',
// 'userIdentifier' => User Object (
// ['name' => '王五', 'age' => 35]
// ),
// 'complexIdentifier' => AdminUser Object (
// ['name' => '赵六', 'age' => 40, 'role' => 'super_admin']
// )
// ]
最后更新于