- 修改 CompilerBase.php 中的参数解析逻辑,统一使用 parseCallArgValue 方法 - 添加 materializeCallArgValue 和 shouldMaterializeCallArg 辅助方法 - 对数组维度获取和属性获取表达式进行去间接化处理 - 在参数转换过程中添加对象属性的特殊处理 - 新增 default array property 测试用例验证数组属性初始化功能 - 新增 unset on arrays and variables 测试用例验证对象参数传递行为pull/1/head
parent
e208fe11bb
commit
04b3d7de20
3 changed files with 119 additions and 2 deletions
@ -0,0 +1,46 @@ |
||||
--TEST-- |
||||
unset on arrays and variables |
||||
--FILE-- |
||||
<?php |
||||
|
||||
class Bar { |
||||
public $object; |
||||
} |
||||
|
||||
function foo($obj) { |
||||
$obj = new ArrayObject(); |
||||
$obj['hello'] = 'world'; |
||||
} |
||||
|
||||
function main() { |
||||
$bar = new Bar(); |
||||
$o1 = new stdClass(); |
||||
$o1->a = 1; |
||||
$o1->b = 2; |
||||
$o1->c = 3; |
||||
$bar->object = $o1; |
||||
foo($bar->object); |
||||
var_dump($bar->object); |
||||
|
||||
$arr = ['object' => $o1]; |
||||
foo($arr['object']); |
||||
var_dump($arr['object']); |
||||
} |
||||
?> |
||||
--EXPECTF-- |
||||
object(stdClass)#%d (3) { |
||||
["a"]=> |
||||
int(1) |
||||
["b"]=> |
||||
int(2) |
||||
["c"]=> |
||||
int(3) |
||||
} |
||||
object(stdClass)#%d (3) { |
||||
["a"]=> |
||||
int(1) |
||||
["b"]=> |
||||
int(2) |
||||
["c"]=> |
||||
int(3) |
||||
} |
||||
@ -0,0 +1,47 @@ |
||||
--TEST-- |
||||
default array property |
||||
--FILE-- |
||||
<?php |
||||
class Foo |
||||
{ |
||||
public array $board; |
||||
|
||||
public function run(): void |
||||
{ |
||||
$this->board = []; |
||||
$board = []; |
||||
for ($i = 0; $i < 4; $i++) { |
||||
$this->board[$i] = 999 + $i; |
||||
$board[$i] = 112 * $i; |
||||
} |
||||
var_dump($board); |
||||
var_dump($this->board); |
||||
} |
||||
} |
||||
|
||||
function main() { |
||||
$o = new Foo; |
||||
$o->run(); |
||||
} |
||||
?> |
||||
--EXPECT-- |
||||
array(4) { |
||||
[0]=> |
||||
int(0) |
||||
[1]=> |
||||
int(112) |
||||
[2]=> |
||||
int(224) |
||||
[3]=> |
||||
int(336) |
||||
} |
||||
array(4) { |
||||
[0]=> |
||||
int(999) |
||||
[1]=> |
||||
int(1000) |
||||
[2]=> |
||||
int(1001) |
||||
[3]=> |
||||
int(1002) |
||||
} |
||||
Loading…
Reference in new issue