Non-nullable default parameters
BoShurik opened this issue · 5 comments
BoShurik commented
$container = new Container([
'items' => [
'__class' => ArrayIterator::class,
'__construct()' => [
[],
],
],
]);
$items = $container->get('items'); // Uncaught TypeError: ArrayIterator::__construct() expects parameter 2 to be int, null given
assert($items instanceof ArrayIterator);
$container = new Container([
'items' => [
'__class' => ArrayIterator::class,
'__construct()' => [
['one', 'two'],
],
],
]);
$items = $container->get('items'); // Uncaught TypeError: ArrayIterator::__construct() expects parameter 2 to be int, null given
assert($items instanceof ArrayIterator);
Even
$container = new Container([
'items' => [
'__class' => ArrayIterator::class,
'__construct()' => [
[],
0
],
],
]);
$items = $container->get('items'); // Uncaught TypeError: ArrayIterator::__construct() expects parameter 2 to be int, null given
assert($items instanceof ArrayIterator);
but
$container = new Container([
'items' => [
'__class' => ArrayIterator::class,
'__construct()' => [
['one', 'two'],
0
],
],
]);
$items = $container->get('items');
assert($items instanceof ArrayIterator); // Ok
hiqsol commented
Very good point! Thank you!
I'll try to fix it.
hiqsol commented
That's a PHP issue :)
https://3v4l.org/7CGBZ
Reflection returns wrong information.
Looks like fixed in PHP 8.
Also, please see test in #172
The container process default parameters correctly.
hiqsol commented
It's a bug. Fixing it.
hiqsol commented