Skip to content

Commit aa40af0

Browse files
committed
Helpers::autowireArguments() can handle PHP 7.1 nullable types
1 parent 7d1385a commit aa40af0

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

src/DI/Helpers.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public static function autowireArguments(\ReflectionFunctionAbstract $method, ar
119119
$optCount = 0;
120120
}
121121

122-
} elseif ($parameter->isOptional() || $parameter->isDefaultValueAvailable()) {
122+
} elseif (($class && $parameter->allowsNull()) || $parameter->isOptional() || $parameter->isDefaultValueAvailable()) {
123123
// !optional + defaultAvailable = func($a = NULL, $b) since 5.4.7
124124
// optional + !defaultAvailable = i.e. Exception::__construct, mysqli::mysqli, ...
125125
$res[$num] = $parameter->isDefaultValueAvailable() ? $parameter->getDefaultValue() : NULL;
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
/**
4+
* Test: Nette\DI\Config\Helpers::autowireArguments()
5+
* @phpversion 7.1
6+
*/
7+
8+
use Nette\DI\Helpers;
9+
use Tester\Assert;
10+
11+
12+
require __DIR__ . '/../bootstrap.php';
13+
14+
15+
class Container
16+
{
17+
function getByType($type)
18+
{
19+
return $type === 'Test' ? new Test : NULL;
20+
}
21+
}
22+
23+
class Test
24+
{
25+
function method(Test $class, self $self, Undefined $nullable1 = NULL, int $nullable2 = NULL)
26+
{}
27+
28+
function methodNullable(?Test $class, ?self $self, ?Undefined $nullable1, ?int $nullable2)
29+
{}
30+
}
31+
32+
$container = new Container;
33+
34+
Assert::equal(
35+
[new Test, new Test],
36+
Helpers::autowireArguments(new ReflectionMethod('Test', 'method'), [], $container)
37+
);
38+
39+
Assert::equal(
40+
[new Test, new Test],
41+
Helpers::autowireArguments(new ReflectionMethod('Test', 'methodNullable'), [], $container)
42+
);

0 commit comments

Comments
 (0)