3v4l.org

run code in 200+ 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; } }
based on CrEev

Shows result from various feature-branches currently under review from the php developers. Contact me to have additional branches featured.

Output for branch php-master
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 branch php-master+opcache
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 branch php-master+jit
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()

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page