- 测试toArray()方法调度功能 - 验证(array)强制转换调用toArray()而不是读取属性表 - 添加User类包含toArray方法的测试 - 添加PlainUser类无toArray方法的对照测试 - 验证有toArray方法时强制转换调用该方法 - 验证无toArray方法时回退到属性表读取pull/1/head
parent
a4ac86524c
commit
8deb99c372
1 changed files with 55 additions and 0 deletions
@ -0,0 +1,55 @@ |
|||||||
|
--TEST-- |
||||||
|
toArray() method dispatch: (array) cast calls toArray() instead of reading property table |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
|
||||||
|
class User { |
||||||
|
public int $id; |
||||||
|
public string $name; |
||||||
|
|
||||||
|
public function __construct(int $id, string $name) { |
||||||
|
$this->id = $id; |
||||||
|
$this->name = $name; |
||||||
|
} |
||||||
|
|
||||||
|
public function toArray(): array { |
||||||
|
return [ |
||||||
|
'uid' => $this->id, |
||||||
|
'display_name' => $this->name, |
||||||
|
'source' => 'toArray', |
||||||
|
]; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
class PlainUser { |
||||||
|
public int $id; |
||||||
|
public string $name; |
||||||
|
|
||||||
|
public function __construct(int $id, string $name) { |
||||||
|
$this->id = $id; |
||||||
|
$this->name = $name; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function main() { |
||||||
|
$user = new User(1, 'admin'); |
||||||
|
// (array) cast should call User::toArray(), not read properties |
||||||
|
$arr = (array) $user; |
||||||
|
var_dump($arr['uid']); |
||||||
|
var_dump($arr['display_name']); |
||||||
|
var_dump($arr['source']); |
||||||
|
|
||||||
|
// no toArray() method — falls back to property table |
||||||
|
$plain = new PlainUser(2, 'guest'); |
||||||
|
$arr2 = (array) $plain; |
||||||
|
var_dump($arr2['id']); |
||||||
|
var_dump($arr2['name']); |
||||||
|
} |
||||||
|
|
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
int(1) |
||||||
|
string(5) "admin" |
||||||
|
string(7) "toArray" |
||||||
|
int(2) |
||||||
|
string(5) "guest" |
||||||
Loading…
Reference in new issue