johnbillion / query-monitor

The developer tools panel for WordPress
https://querymonitor.com
GNU General Public License v2.0
1.59k stars 208 forks source link

Uncaught TypeError: ReflectionMethod::__construct(): Argument #2 ($method) must be of type ?string, array given #902

Open Luc45 opened 1 week ago

Luc45 commented 1 week ago

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...?

Luc45 commented 1 week ago

I forgot to mention that this ran on PHP 8.4 RC.3