Skip to content

Commit 9fcfe47

Browse files
MartinMajordg
authored andcommitted
PhpReflection::getParameterType() can handle PHP 7.1 nullable types (#126)
1 parent fa39a0e commit 9fcfe47

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

src/DI/PhpReflection.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,10 @@ public static function getDeclaringClass(\ReflectionProperty $prop)
5959
public static function getParameterType(\ReflectionParameter $param)
6060
{
6161
if (PHP_VERSION_ID >= 70000) {
62-
$type = $param->hasType() ? (string) $param->getType() : NULL;
63-
return strtolower($type) === 'self' ? $param->getDeclaringClass()->getName() : $type;
62+
if ($param->hasType()) {
63+
$type = PHP_VERSION_ID >= 70100 ? $param->getType()->getName() : (string) $param->getType();
64+
return strtolower($type) === 'self' ? $param->getDeclaringClass()->getName() : $type;
65+
}
6466
} elseif ($param->isArray() || $param->isCallable()) {
6567
return $param->isArray() ? 'array' : 'callable';
6668
} else {
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
/**
4+
* Test: Nette\DI\PhpReflection::getParameterType
5+
* @phpversion 7.1
6+
*/
7+
8+
use Nette\DI\PhpReflection;
9+
use Tester\Assert;
10+
11+
12+
require __DIR__ . '/../bootstrap.php';
13+
14+
15+
use Test\B; // for testing purposes
16+
17+
class A
18+
{
19+
function method(Undeclared $undeclared, B $b, array $array, callable $callable, $none, ?B $nullable)
20+
{}
21+
}
22+
23+
$method = new \ReflectionMethod('A', 'method');
24+
$params = $method->getParameters();
25+
26+
Assert::same('Undeclared', PhpReflection::getParameterType($params[0]));
27+
Assert::same('Test\B', PhpReflection::getParameterType($params[1]));
28+
Assert::same('array', PhpReflection::getParameterType($params[2]));
29+
Assert::same('callable', PhpReflection::getParameterType($params[3]));
30+
Assert::null(PhpReflection::getParameterType($params[4]));
31+
Assert::same('Test\B', PhpReflection::getParameterType($params[5]));

0 commit comments

Comments
 (0)