- Implement multi-return forward args functionality for by-value parameters - Add support for parameter forwarding with php::takeValue wrapper - Create test cases for multi-return array adapter behavior - Update translator to handle forwarded arguments correctly - Add phpunit test coverage for multi-return tuple functionality - Implement proper argument consumption logic for multi-return scenariospull/20/head
parent
91c8dc9544
commit
682a9be61b
4 changed files with 137 additions and 3 deletions
@ -0,0 +1,99 @@ |
||||
--TEST-- |
||||
Multi-return Array adapter safely consumes its by-value parameters |
||||
--FILE-- |
||||
<?php |
||||
function multi_return_forward_args( |
||||
mixed $value, |
||||
string $text, |
||||
array $items, |
||||
object $object, |
||||
int $count, |
||||
&$reference, |
||||
...$rest, |
||||
): array { |
||||
$reference = 'updated'; |
||||
return [$value, $text, $items, $object, $count, $reference, $rest]; |
||||
} |
||||
|
||||
function multi_return_forward_defaults( |
||||
string $text = 'default', |
||||
array $items = [], |
||||
...$rest, |
||||
): array { |
||||
return [$text, $items, $rest]; |
||||
} |
||||
|
||||
function main(): void |
||||
{ |
||||
$object = (object) ['name' => 'direct']; |
||||
$directReference = 'before'; |
||||
[$value, $text, $items, $directObject, $count, $returnedReference, $rest] |
||||
= multi_return_forward_args('value', 'text', [1], $object, 2, $directReference, 'x'); |
||||
var_dump( |
||||
$value, |
||||
$text, |
||||
$items, |
||||
$directObject->name, |
||||
$count, |
||||
$directReference, |
||||
$returnedReference, |
||||
$rest, |
||||
); |
||||
|
||||
$arrayReference = 'before'; |
||||
$array = multi_return_forward_args('array', 'adapter', [3], $object, 4, $arrayReference, 'y', 'z'); |
||||
var_dump($arrayReference, $array[0], $array[1], $array[2], $array[3]->name, $array[4], $array[5], $array[6]); |
||||
|
||||
$defaults = multi_return_forward_defaults(); |
||||
[$defaultText, $defaultItems, $defaultRest] = multi_return_forward_defaults(rest: 'named'); |
||||
var_dump($defaults, $defaultText, $defaultItems, $defaultRest); |
||||
} |
||||
?> |
||||
--EXPECT-- |
||||
string(5) "value" |
||||
string(4) "text" |
||||
array(1) { |
||||
[0]=> |
||||
int(1) |
||||
} |
||||
string(6) "direct" |
||||
int(2) |
||||
string(7) "updated" |
||||
string(7) "updated" |
||||
array(1) { |
||||
[0]=> |
||||
string(1) "x" |
||||
} |
||||
string(7) "updated" |
||||
string(5) "array" |
||||
string(7) "adapter" |
||||
array(1) { |
||||
[0]=> |
||||
int(3) |
||||
} |
||||
string(6) "direct" |
||||
int(4) |
||||
string(7) "updated" |
||||
array(2) { |
||||
[0]=> |
||||
string(1) "y" |
||||
[1]=> |
||||
string(1) "z" |
||||
} |
||||
array(3) { |
||||
[0]=> |
||||
string(7) "default" |
||||
[1]=> |
||||
array(0) { |
||||
} |
||||
[2]=> |
||||
array(0) { |
||||
} |
||||
} |
||||
string(7) "default" |
||||
array(0) { |
||||
} |
||||
array(1) { |
||||
["rest"]=> |
||||
string(5) "named" |
||||
} |
||||
Loading…
Reference in new issue