test(aot): 添加对象属性toArray方法测试用例

- 测试toArray()方法调度功能
- 验证(array)强制转换调用toArray()而不是读取属性表
- 添加User类包含toArray方法的测试
- 添加PlainUser类无toArray方法的对照测试
- 验证有toArray方法时强制转换调用该方法
- 验证无toArray方法时回退到属性表读取
pull/1/head
韩天峰 3 months ago
parent a4ac86524c
commit 8deb99c372
  1. 55
      tests/aot/object_property/toarray-method.phpt

@ -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…
Cancel
Save