Skip to content

Commit 9d9d261

Browse files
committed
gitbook test
1 parent e684ad1 commit 9d9d261

File tree

7 files changed

+410
-82
lines changed

7 files changed

+410
-82
lines changed

docs/zh/README.md

Lines changed: 0 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -220,88 +220,7 @@ class Profile extends Serialize {
220220

221221
无论使用哪种方式,`Serialize` 类都能正常工作,并提供相同的类型转换和序列化功能。
222222

223-
#### 枚举转换
224223

225-
枚举转换提供了强大且灵活的枚举处理机制,支持多种枚举类型和转换场景。
226-
227-
- 支持 `tryFrom()``cases()` 方法的枚举类型
228-
- 输入时自动将字符串转换为枚举实例
229-
- 输出时自动将枚举转换为字符串(枚举名称)
230-
- 提供灵活且安全的枚举处理机制
231-
232-
##### 普通枚举
233-
234-
```php
235-
enum UserRole {
236-
case ADMIN;
237-
case EDITOR;
238-
case VIEWER;
239-
}
240-
241-
class ComplexUser extends Serialize {
242-
243-
public UserRole $role;
244-
245-
// 支持多种枚举类型
246-
public UserStatus|UserRole $mixedStatus;
247-
}
248-
249-
$complexUser = ComplexUser::from([
250-
'role' => 'ADMIN', // 自动转换为 UserRole::ADMIN
251-
'mixedStatus' => 'ACTIVE' // 可以是 UserStatus 或 UserRole
252-
]);
253-
254-
echo $complexUser->role; // 返回 UserRole枚举实例
255-
256-
$complexUserArray = $complexUser->toArray();
257-
// $complexUserArray 的内容:
258-
// [
259-
// 'role' => 'ADMIN',
260-
// 'mixedStatus' => 'ACTIVE'
261-
// ]
262-
```
263-
264-
##### 回退枚举
265-
266-
```php
267-
use Astral\Serialize\Serialize;
268-
269-
// BackedEnum
270-
enum UserStatus: string {
271-
case ACTIVE = 'active';
272-
case INACTIVE = 'inactive';
273-
case SUSPENDED = 'suspended';
274-
}
275-
276-
// 定义带有枚举的用户类
277-
class User extends Serialize {
278-
public string $name;
279-
280-
// 支持 UnitEnum 和 BackedEnum
281-
public UserStatus $status;
282-
283-
// 支持多枚举类型
284-
public UserStatus|string $alternateStatus;
285-
}
286-
287-
// 创建用户对象
288-
$user = User::from([
289-
'name' => '张三',
290-
'status' => 'active', // 自动转换为 UserStatus::ACTIVE
291-
'alternateStatus' => 'inactive' // 支持字符串或枚举值
292-
]);
293-
294-
var_dump($user->status); // 输出: UserStatus::ACTIVE
295-
296-
// 转换为数组
297-
$userArray = $user->toArray();
298-
// $userArray 的内容:
299-
// [
300-
// 'name' => '张三',
301-
// 'status' => 'ACTIVE', // 输出枚举名称
302-
// 'alternateStatus' => 'INACTIVE'
303-
// ]
304-
```
305224

306225
#### Null 值转换规则详细示例
307226

docs/zh/SUMMARY.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# Summary
22

3+
## Use headings to create page groups like this one
4+
35
* [介绍](description.md)
46
* [快速开始](getting-started.md)
5-
* [进阶使用](base-mapper.md)
7+
8+
## 属性转换
9+
10+
* [基本类型转换](mapper/base-mapper.md)
11+
* [Null值转换](mapper/null-mapper.md)
12+
* [枚举转换](mapper/enum-mapper.md)
13+
* [数组对象转换](mapper/array-mapper.md)
14+
* [联合类型转换](mapper/union-mapper.md)

docs/zh/mapper/array-mapper.md

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
#### 数组对象转换
2+
3+
##### phpDoc定义
4+
5+
```php
6+
use Astral\Serialize\Serialize;
7+
8+
// 定义基础数组类型
9+
class ArrayOne extends Serialize {
10+
public string $type = 'one';
11+
public string $name;
12+
}
13+
14+
class ArrayTwo extends Serialize {
15+
public string $type = 'two';
16+
public string $code;
17+
}
18+
19+
class MultiArraySerialize extends Serialize {
20+
// 场景1:混合类型数组
21+
/** @var (ArrayOne|ArrayTwo)[] */
22+
public array $mixedTypeArray;
23+
24+
// 场景2:多类型数组
25+
/** @var ArrayOne[]|ArrayTwo[] */
26+
public array $multiTypeArray;
27+
28+
// 场景3:键值对混合类型
29+
/** @var array(string, ArrayOne|ArrayTwo) */
30+
public array $keyValueMixedArray;
31+
}
32+
33+
// 场景1:混合类型数组
34+
$data1 = MultiArraySerialize::from(
35+
mixedTypeArray : [
36+
['name' => '张三'], // 转化 ArrayOne 对象
37+
['code' => 'ABC123'], // 转化 ArrayTwo 对象
38+
['name' => '李四'], // 转化 ArrayOne 对象
39+
['code' => 'DEF456'] // 转化 ArrayTwo 对象
40+
]
41+
);
42+
43+
$data1Array = $data1->toArray();
44+
// $data1Array 的内容:
45+
// [
46+
// 'mixedTypeArray' => [
47+
// [0] => ArrayOne Object
48+
// (
49+
// ['name' => '张三', 'type' => 'one'],
50+
// )
51+
// [1] => ArrayTwo Object
52+
// (
53+
// ['code' => 'ABC123', 'type' => 'two'],
54+
// )
55+
// [2] => ArrayOne Object
56+
// (
57+
// ['name' => '李四', 'type' => 'one'],
58+
// )
59+
// [3] => ArrayTwo Object
60+
// (
61+
// ['code' => 'DEF456', 'type' => 'two'],
62+
// )
63+
// ]
64+
// ]
65+
66+
// 场景2:多类型数组
67+
$data2 = MultiArraySerialize::from(
68+
multiTypeArray:[
69+
['name' => '王五'], // 转化 ArrayOne 对象
70+
['name' => '赵六'], // 转化 ArrayOne 对象
71+
['code' => 'GHI789'] // 转化 ArrayTwo 对象
72+
]
73+
);
74+
75+
$data2Array = $data2->toArray();
76+
// $data2Array 的内容:
77+
// [
78+
// 'multiTypeArray' => [
79+
// ArrayOne Object (
80+
// ['name' => '王五', 'type' => 'one']
81+
// ),
82+
// ArrayOne Object (
83+
// ['name' => '赵六', 'type' => 'one']
84+
// ),
85+
// ArrayTwo Object (
86+
// ['code' => 'GHI789', 'type' => 'two']
87+
// )
88+
// ]
89+
// ]
90+
91+
// 场景3:键值对混合类型
92+
$data3 = MultiArraySerialize::from(
93+
keyValueMixedArray: [
94+
'user1' => ['name' => '张三'], // 转化 ArrayOne 对象
95+
'system1' => ['code' => 'ABC123'], // 转化 ArrayTwo 对象
96+
'user2' => ['name' => '李四'] // 转化 ArrayOne 对象
97+
]
98+
);
99+
100+
$data3Array = $data3->toArray();
101+
// $data3Array 的内容:
102+
// [
103+
// 'keyValueMixedArray' => [
104+
// 'user1' => ArrayOne Object (
105+
// ['name' => '张三', 'type' => 'one']
106+
// ),
107+
// 'system1' => ArrayTwo Object (
108+
// ['code' => 'ABC123', 'type' => 'two']
109+
// ),
110+
// 'user2' => ArrayOne Object (
111+
// ['name' => '李四', 'type' => 'one']
112+
// )
113+
// ]
114+
// ]
115+
116+
// 场景4:无法匹配时的处理
117+
$data4 = MultiArraySerialize::from(
118+
mixedTypeArray : [
119+
['unknown' => 'data1'],
120+
['another' => 'data2']
121+
]
122+
);
123+
124+
$data4Array = $data4->toArray();
125+
// $data4Array 的内容:
126+
// [
127+
// 'mixedTypeArray' => [
128+
// ['unknown' => 'data1'],
129+
// ['another' => 'data2']
130+
// ]
131+
// ]
132+
```
File renamed without changes.

docs/zh/mapper/enum-mapper.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#### 枚举转换
2+
3+
枚举转换提供了强大且灵活的枚举处理机制,支持多种枚举类型和转换场景。
4+
5+
- 支持 `tryFrom()``cases()` 方法的枚举类型
6+
- 输入时自动将字符串转换为枚举实例
7+
- 输出时自动将枚举转换为字符串(枚举名称)
8+
- 提供灵活且安全的枚举处理机制
9+
10+
##### 普通枚举
11+
12+
```php
13+
enum UserRole {
14+
case ADMIN;
15+
case EDITOR;
16+
case VIEWER;
17+
}
18+
19+
class ComplexUser extends Serialize {
20+
21+
public UserRole $role;
22+
23+
// 支持多种枚举类型
24+
public UserStatus|UserRole $mixedStatus;
25+
}
26+
27+
$complexUser = ComplexUser::from([
28+
'role' => 'ADMIN', // 自动转换为 UserRole::ADMIN
29+
'mixedStatus' => 'ACTIVE' // 可以是 UserStatus 或 UserRole
30+
]);
31+
32+
echo $complexUser->role; // 返回 UserRole枚举实例
33+
34+
$complexUserArray = $complexUser->toArray();
35+
// $complexUserArray 的内容:
36+
// [
37+
// 'role' => 'ADMIN',
38+
// 'mixedStatus' => 'ACTIVE'
39+
// ]
40+
```
41+
42+
##### 回退枚举
43+
44+
```php
45+
use Astral\Serialize\Serialize;
46+
47+
// BackedEnum
48+
enum UserStatus: string {
49+
case ACTIVE = 'active';
50+
case INACTIVE = 'inactive';
51+
case SUSPENDED = 'suspended';
52+
}
53+
54+
// 定义带有枚举的用户类
55+
class User extends Serialize {
56+
public string $name;
57+
58+
// 支持 UnitEnum 和 BackedEnum
59+
public UserStatus $status;
60+
61+
// 支持多枚举类型
62+
public UserStatus|string $alternateStatus;
63+
}
64+
65+
// 创建用户对象
66+
$user = User::from([
67+
'name' => '张三',
68+
'status' => 'active', // 自动转换为 UserStatus::ACTIVE
69+
'alternateStatus' => 'inactive' // 支持字符串或枚举值
70+
]);
71+
72+
var_dump($user->status); // 输出: UserStatus::ACTIVE
73+
74+
// 转换为数组
75+
$userArray = $user->toArray();
76+
// $userArray 的内容:
77+
// [
78+
// 'name' => '张三',
79+
// 'status' => 'ACTIVE', // 输出枚举名称
80+
// 'alternateStatus' => 'INACTIVE'
81+
// ]
82+
```

0 commit comments

Comments
 (0)