3v4l.org

run code in 300+ PHP versions simultaneously
<?php // An example callback function function my_callback_function() { echo 'hello world!', PHP_EOL; } // Callback methods in classes class ParentClass { static function myCallbackMethod() { echo 'Hello Parent!', PHP_EOL; } } class MyClass extends ParentClass { static function myCallbackMethod() { echo 'Hello Child!', PHP_EOL; } } class Invokable { public function __invoke() { echo 'Hello Invokable', PHP_EOL; } } $obj = new MyClass(); $invokable = new Invokable(); $callbacks = array( 'type1' => 'my_callback_function', 'type2' => array('MyClass', 'myCallbackMethod'), 'type3' => array($obj, 'myCallbackMethod'), 'type6' => $invokable, 'type7' => function() { echo 'Hello Closure', PHP_EOL; }, 'type4' => 'MyClass::myCallbackMethod', 'type5' => array('MyClass', 'parent::myCallbackMethod'), ); foreach( $callbacks as $key => $callback ) { echo PHP_EOL, 'Testing ', $key, PHP_EOL; var_dump(is_callable($callback)); call_user_func($callback); try { $callback(); } catch( Error $e ) { echo $e->getMessage(), PHP_EOL; } }
Output for 8.2.0 - 8.2.17, 8.3.0 - 8.3.4
Testing type1 bool(true) hello world! hello world! Testing type2 bool(true) Hello Child! Hello Child! Testing type3 bool(true) Hello Child! Hello Child! Testing type6 bool(true) Hello Invokable Hello Invokable Testing type7 bool(true) Hello Closure Hello Closure Testing type4 bool(true) Hello Child! Hello Child! Testing type5 Deprecated: Callables of the form ["MyClass", "parent::myCallbackMethod"] are deprecated in /in/C28tc on line 42 bool(true) Deprecated: Callables of the form ["MyClass", "parent::myCallbackMethod"] are deprecated in /in/C28tc on line 43 Hello Parent! Call to undefined method MyClass::parent::myCallbackMethod()
Output for 7.0.0 - 7.0.33, 7.1.0 - 7.1.30, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.27
Testing type1 bool(true) hello world! hello world! Testing type2 bool(true) Hello Child! Hello Child! Testing type3 bool(true) Hello Child! Hello Child! Testing type6 bool(true) Hello Invokable Hello Invokable Testing type7 bool(true) Hello Closure Hello Closure Testing type4 bool(true) Hello Child! Hello Child! Testing type5 bool(true) Hello Parent! Call to undefined method MyClass::parent::myCallbackMethod()
Output for 5.4.0 - 5.4.45, 5.5.0 - 5.5.38, 5.6.0 - 5.6.40
Testing type1 bool(true) hello world! hello world! Testing type2 bool(true) Hello Child! Hello Child! Testing type3 bool(true) Hello Child! Hello Child! Testing type6 bool(true) Hello Invokable Hello Invokable Testing type7 bool(true) Hello Closure Hello Closure Testing type4 bool(true) Hello Child! Fatal error: Call to undefined function MyClass::myCallbackMethod() in /in/C28tc on line 45
Process exited with code 255.
Output for 5.3.0 - 5.3.29
Testing type1 bool(true) hello world! hello world! Testing type2 bool(true) Hello Child! Fatal error: Function name must be a string in /in/C28tc on line 45
Process exited with code 255.
Output for 5.1.0 - 5.1.6, 5.2.0 - 5.2.17
Parse error: syntax error, unexpected T_FUNCTION in /in/C28tc on line 35
Process exited with code 255.
Output for 5.0.0 - 5.0.5
Parse error: parse error, unexpected T_FUNCTION in /in/C28tc on line 35
Process exited with code 255.
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STATIC, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/C28tc on line 10
Process exited with code 255.
Output for 4.3.0 - 4.3.1, 4.3.5 - 4.3.11, 4.4.0 - 4.4.1
Parse error: parse error, unexpected T_STATIC, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/C28tc on line 10
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /in/C28tc on line 10
Process exited with code 255.

preferences:
338.71 ms | 401 KiB | 433 Q