- 测试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