Skip to content

Commit

Permalink
support for PHP 8.4
Browse files Browse the repository at this point in the history
  • Loading branch information
dg committed Jun 18, 2024
1 parent 99976d6 commit 5de10a1
Show file tree
Hide file tree
Showing 7 changed files with 14 additions and 11 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
php: ['8.0', '8.1', '8.2', '8.3']
php: ['8.0', '8.1', '8.2', '8.3', '8.4']

fail-fast: false

Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
}
],
"require": {
"php": "8.0 - 8.3"
"php": "8.0 - 8.4"
},
"require-dev": {
"nette/tester": "^2.5",
Expand Down
2 changes: 1 addition & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ The recommended way to install is via Composer:
composer require nette/utils
```

Nette Utils 4.0 is compatible with PHP 8.0 to 8.3.
Nette Utils 4.0 is compatible with PHP 8.0 to 8.4.

 <!---->

Expand Down
2 changes: 1 addition & 1 deletion src/Utils/Callback.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public static function toReflection($callable): \ReflectionMethod|\ReflectionFun
}

if (is_string($callable) && str_contains($callable, '::')) {
return new ReflectionMethod($callable);
return new ReflectionMethod(...explode('::', $callable, 2));
} elseif (is_array($callable)) {
return new ReflectionMethod($callable[0], $callable[1]);
} elseif (is_object($callable) && !$callable instanceof \Closure) {
Expand Down
8 changes: 5 additions & 3 deletions src/Utils/Reflection.php
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public static function getMethodDeclaringMethod(\ReflectionMethod $method): \Ref

$hash = [$method->getFileName(), $method->getStartLine(), $method->getEndLine()];
if (($alias = $decl->getTraitAliases()[$method->name] ?? null)
&& ($m = new \ReflectionMethod($alias))
&& ($m = new \ReflectionMethod(...explode('::', $alias, 2)))
&& $hash === [$m->getFileName(), $m->getStartLine(), $m->getEndLine()]
) {
return self::getMethodDeclaringMethod($m);
Expand All @@ -125,7 +125,7 @@ public static function getMethodDeclaringMethod(\ReflectionMethod $method): \Ref
public static function areCommentsAvailable(): bool
{
static $res;
return $res ?? $res = (bool) (new \ReflectionMethod(__METHOD__))->getDocComment();
return $res ?? $res = (bool) (new \ReflectionMethod(self::class, __FUNCTION__))->getDocComment();
}


Expand All @@ -136,7 +136,9 @@ public static function toString(\Reflector $ref): string
} elseif ($ref instanceof \ReflectionMethod) {
return $ref->getDeclaringClass()->name . '::' . $ref->name . '()';
} elseif ($ref instanceof \ReflectionFunction) {
return $ref->name . '()';
return PHP_VERSION_ID >= 80200 && $ref->isAnonymous()
? '{closure}()'
: $ref->name . '()';
} elseif ($ref instanceof \ReflectionProperty) {
return self::getPropertyDeclaringClass($ref)->name . '::$' . $ref->name;
} elseif ($ref instanceof \ReflectionParameter) {
Expand Down
8 changes: 4 additions & 4 deletions tests/Utils/Callback.closure.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ class TestChild extends Test
function getName($ref)
{
if ($ref instanceof ReflectionFunction) {
return $ref->getName();
return $ref->getShortName();
} elseif ($ref instanceof ReflectionMethod) {
return $ref->getDeclaringClass()->getName() . '::' . $ref->getName();
}
Expand Down Expand Up @@ -121,9 +121,9 @@ test('closure', function () {
Assert::same($closure, Closure::fromCallable($closure));
Assert::same($closure, Callback::unwrap($closure));
Assert::same('{closure}', Callback::toString($closure));
Assert::same('{closure}', getName(Callback::toReflection($closure)));
Assert::same('{closure}', Closure::fromCallable($closure)(...[&$res]));
Assert::same('{closure}', $res);
Assert::match('{closure%a?%}', getName(Callback::toReflection($closure)));
Assert::match('{closure%a?%}', Closure::fromCallable($closure)(...[&$res]));
Assert::match('{closure%a?%}', $res);
});


Expand Down
1 change: 1 addition & 0 deletions tests/Utils/Reflection.toString.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,4 @@ Assert::same('$param in Foo::method()', Reflection::toString(new ReflectionParam
Assert::same('Foo::$var', Reflection::toString(new ReflectionProperty('Foo', 'var')));
Assert::same('func()', Reflection::toString(new ReflectionFunction('func')));
Assert::same('$param in func()', Reflection::toString(new ReflectionParameter('func', 'param')));
Assert::same('$param in {closure}()', Reflection::toString((new ReflectionFunction(function ($param) {}))->getParameters()[0]));

0 comments on commit 5de10a1

Please sign in to comment.