mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
ext/reflection: Add test for ReflectionParameter::getDeclaringFunction() with a ReflectionMethod creation from a Closure (#13987)
This commit is contained in:
committed by
GitHub
parent
47ec32044e
commit
1f8c899dcb
@@ -0,0 +1,43 @@
|
||||
--TEST--
|
||||
Closures via getParameters() and getDeclaringFunction() calling reflection_method_factory() with an internal object being set
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class A {}
|
||||
class B extends A {}
|
||||
|
||||
$closure = function($op1, $op2 = 0): self { };
|
||||
|
||||
$b = new B();
|
||||
$fn = $closure->bindTo($b, B::class);
|
||||
|
||||
const CLOSURE_NAME = '{closure:' . __FILE__ . ':6}';
|
||||
|
||||
$rClosure = new ReflectionFunction($fn);
|
||||
var_dump($rClosure->name == CLOSURE_NAME);
|
||||
|
||||
$params = $rClosure->getParameters();
|
||||
unset ($rClosure);
|
||||
$closureFromParam = $params[0]->getDeclaringFunction();
|
||||
var_dump($closureFromParam::class);
|
||||
var_dump($closureFromParam->name == CLOSURE_NAME);
|
||||
|
||||
$rClass = new ReflectionClass($b);
|
||||
$rMethods = $rClass->getMethods();
|
||||
var_dump($rMethods);
|
||||
|
||||
try {
|
||||
$rMethod = new ReflectionMethod($b, CLOSURE_NAME);
|
||||
var_dump($rMethod);
|
||||
} catch (\Throwable $e) {
|
||||
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
|
||||
}
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
bool(true)
|
||||
string(16) "ReflectionMethod"
|
||||
bool(true)
|
||||
array(0) {
|
||||
}
|
||||
ReflectionException: Method B::{closure:%s:6}() does not exist
|
||||
Reference in New Issue
Block a user