mirror of
https://github.com/php/php-src.git
synced 2025-08-20 01:14:28 +02:00
PHP requires boolean typehints to be written "bool" and disallows
"boolean" as an alias. This changes the error messages to match
the actual type name and avoids confusing messages like "must be
of type boolean, boolean given".
This a followup to ce1d69a1f6, which
implements the same change for integer->int.
251 lines
4 KiB
PHP
251 lines
4 KiB
PHP
--TEST--
|
|
array_walk() closure tests
|
|
--FILE--
|
|
<?php
|
|
|
|
var_dump(array_walk());
|
|
|
|
$ar = false;
|
|
var_dump(array_walk($ar, $ar));
|
|
|
|
$ar = NULL;
|
|
var_dump(array_walk($ar, $ar));
|
|
|
|
$ar = ["one" => 1, "two"=>2, "three" => 3];
|
|
var_dump(array_walk($ar, function(){ var_dump(func_get_args());}));
|
|
|
|
echo "\nclosure with array\n";
|
|
$ar = ["one" => 1, "two"=>2, "three" => 3];
|
|
$user_data = ["sum" => 42];
|
|
$func = function($value, $key, &$udata) {
|
|
var_dump($udata);
|
|
$udata["sum"] += $value;
|
|
};
|
|
|
|
var_dump(array_walk($ar, $func, $user_data));
|
|
echo "End result:";
|
|
var_dump($user_data["sum"]);
|
|
|
|
echo "\nclosure with use\n";
|
|
$ar = ["one" => 1, "two"=>2, "three" => 3];
|
|
$user_data = ["sum" => 42];
|
|
$func = function($value, $key) use (&$user_data) {
|
|
var_dump($user_data);
|
|
$user_data["sum"] += $value;
|
|
};
|
|
|
|
var_dump(array_walk($ar, $func, $user_data));
|
|
echo "End result:";
|
|
var_dump($user_data["sum"]);
|
|
|
|
|
|
echo "\nclosure with object\n";
|
|
$ar = ["one" => 1, "two"=>2, "three" => 3];
|
|
$user_data = (object)["sum" => 42];
|
|
$func = function($value, $key, &$udata) {
|
|
var_dump($udata);
|
|
$udata->sum += $value;
|
|
};
|
|
|
|
var_dump(array_walk($ar, $func, $user_data));
|
|
echo "End result:";
|
|
var_dump($user_data->sum);
|
|
|
|
|
|
|
|
echo "\nfunction with object\n";
|
|
function sum_it_up_object($value, $key, $udata)
|
|
{
|
|
var_dump($udata);
|
|
$udata->sum += $value;
|
|
}
|
|
|
|
$ar = ["one" => 1, "two"=>2, "three" => 3];
|
|
$user_data = (object)["sum" => 42];
|
|
|
|
var_dump(array_walk($ar, "sum_it_up_object", $user_data));
|
|
echo "End result:";
|
|
var_dump($user_data->sum);
|
|
|
|
|
|
echo "\nfunction with array\n";
|
|
function sum_it_up_array($value, $key, $udata)
|
|
{
|
|
var_dump($udata);
|
|
$udata['sum'] += $value;
|
|
}
|
|
|
|
$ar = ["one" => 1, "two"=>2, "three" => 3];
|
|
$user_data = ["sum" => 42];
|
|
|
|
var_dump(array_walk($ar, "sum_it_up_array", $user_data));
|
|
echo "End result:";
|
|
var_dump($user_data['sum']);
|
|
|
|
echo "\nclosure and exception\n";
|
|
$ar = ["one" => 1, "two"=>2, "three" => 3];
|
|
try {
|
|
var_dump(array_walk($ar, function($v, $k) { if ($v == 2) throw new Exception; } ));
|
|
} catch (Exception $e) {
|
|
var_dump($e->getTrace());
|
|
}
|
|
|
|
|
|
echo "Done\n";
|
|
?>
|
|
--EXPECTF--
|
|
Warning: array_walk() expects at least 2 parameters, 0 given in %s on line %d
|
|
NULL
|
|
|
|
Warning: array_walk() expects parameter 1 to be array, bool given in %s on line %d
|
|
NULL
|
|
|
|
Warning: array_walk() expects parameter 1 to be array, null given in %s on line %d
|
|
NULL
|
|
array(2) {
|
|
[0]=>
|
|
int(1)
|
|
[1]=>
|
|
string(3) "one"
|
|
}
|
|
array(2) {
|
|
[0]=>
|
|
int(2)
|
|
[1]=>
|
|
string(3) "two"
|
|
}
|
|
array(2) {
|
|
[0]=>
|
|
int(3)
|
|
[1]=>
|
|
string(5) "three"
|
|
}
|
|
bool(true)
|
|
|
|
closure with array
|
|
array(1) {
|
|
["sum"]=>
|
|
int(42)
|
|
}
|
|
array(1) {
|
|
["sum"]=>
|
|
int(43)
|
|
}
|
|
array(1) {
|
|
["sum"]=>
|
|
int(45)
|
|
}
|
|
bool(true)
|
|
End result:int(42)
|
|
|
|
closure with use
|
|
array(1) {
|
|
["sum"]=>
|
|
int(42)
|
|
}
|
|
array(1) {
|
|
["sum"]=>
|
|
int(43)
|
|
}
|
|
array(1) {
|
|
["sum"]=>
|
|
int(45)
|
|
}
|
|
bool(true)
|
|
End result:int(48)
|
|
|
|
closure with object
|
|
object(stdClass)#1 (1) {
|
|
["sum"]=>
|
|
int(42)
|
|
}
|
|
object(stdClass)#1 (1) {
|
|
["sum"]=>
|
|
int(43)
|
|
}
|
|
object(stdClass)#1 (1) {
|
|
["sum"]=>
|
|
int(45)
|
|
}
|
|
bool(true)
|
|
End result:int(48)
|
|
|
|
function with object
|
|
object(stdClass)#2 (1) {
|
|
["sum"]=>
|
|
int(42)
|
|
}
|
|
object(stdClass)#2 (1) {
|
|
["sum"]=>
|
|
int(43)
|
|
}
|
|
object(stdClass)#2 (1) {
|
|
["sum"]=>
|
|
int(45)
|
|
}
|
|
bool(true)
|
|
End result:int(48)
|
|
|
|
function with array
|
|
array(1) {
|
|
["sum"]=>
|
|
int(42)
|
|
}
|
|
array(1) {
|
|
["sum"]=>
|
|
int(42)
|
|
}
|
|
array(1) {
|
|
["sum"]=>
|
|
int(42)
|
|
}
|
|
bool(true)
|
|
End result:int(42)
|
|
|
|
closure and exception
|
|
array(2) {
|
|
[0]=>
|
|
array(2) {
|
|
["function"]=>
|
|
string(9) "{closure}"
|
|
["args"]=>
|
|
array(2) {
|
|
[0]=>
|
|
int(2)
|
|
[1]=>
|
|
string(3) "two"
|
|
}
|
|
}
|
|
[1]=>
|
|
array(4) {
|
|
["file"]=>
|
|
string(%d) "%s"
|
|
["line"]=>
|
|
int(%d)
|
|
["function"]=>
|
|
string(10) "array_walk"
|
|
["args"]=>
|
|
array(2) {
|
|
[0]=>
|
|
&array(3) {
|
|
["one"]=>
|
|
int(1)
|
|
["two"]=>
|
|
int(2)
|
|
["three"]=>
|
|
int(3)
|
|
}
|
|
[1]=>
|
|
object(Closure)#2 (1) {
|
|
["parameter"]=>
|
|
array(2) {
|
|
["$v"]=>
|
|
string(10) "<required>"
|
|
["$k"]=>
|
|
string(10) "<required>"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Done
|