Uncaught TypeError: ReflectionMethod::__construct(): Argument #2 ($method) must be of type ?string, array given
Opened this issue · 2 comments
I'm encountering this error:
Uncaught TypeError: ReflectionMethod::__construct(): Argument #2 ($method) must be of type ?string, array given
Pointing to this line.
I've stumbled upon this error when trying to simulate an error in a context similar to this one:
function foo_init() {
if ( ! class_exists( 'Foo' ) ) {
class Foo extends Bar {
protected function __construct() {
parent::__construct();
add_action( 'init', function () {
if ( rand( 0, 10 ) === 10 ) {
throw new \RuntimeException( 'Simulated error . ' );
}
} );
}
}
}
}
It seems $callback['function'][1]
is an array, whereas it should be a string
.
This is probably being called in the context of PHP Debug Logger Collector, output_fatal method, while building the stack trace.
Unfortunately I don't have time right now to further debug this. Maybe some kinda of easy defensive programming here could be useful, like a try-catch and skipping the trace if it fails to build it...?
I forgot to mention that this ran on PHP 8.4 RC.3
a 'quickfix' to combat fatal type errors would be replacing
query-monitor/classes/Util.php
Lines 440 to 444 in 6b66f65
with
} catch ( ReflectionException $e ) {
$callback['error'] = new WP_Error( 'reflection_exception', $e->getMessage() );
} catch ( TypeError $e ) {
$callback['error'] = new WP_Error( 'type_error', $e->getMessage() );
}