3v4l.org

run code in 300+ PHP versions simultaneously
<?php class A { function __construct() { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } function __destruct() { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function dir_closedir() { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function dir_opendir($path, $options) { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function dir_readdir() { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function dir_rewinddir() { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function mkdir($path, $mode, $options) { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function rename($path_from, $path_to) { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function rmdir($path, $options) { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function stream_cast($cast_as) { var_dump(__FUNCTION__); var_dump(func_get_args()); return false; } public function stream_close() { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function stream_eof() { var_dump(__FUNCTION__); var_dump(func_get_args()); return false; } public function stream_flush() { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function stream_lock($operation) { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function stream_metadata($path, $option, $value) { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function stream_open($path, $mode, $options, &$opened_path) { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function stream_read($count) { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function stream_seek($offset, $whence = SEEK_SET) { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function stream_set_option($option, $arg1, $arg2) { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function stream_stat() { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function stream_tell() { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function stream_truncate($new_size) { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function stream_write($data) { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function unlink($path) { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } public function url_stat($path, $flags) { var_dump(__FUNCTION__); var_dump(func_get_args()); return true; } } stream_wrapper_register("abc", "A") or die("Failed to register protocol"); chmod('abc://d', 0777);
Output for 8.2.0 - 8.2.17, 8.3.0 - 8.3.4
Deprecated: Creation of dynamic property A::$context is deprecated in /in/W1hA9 on line 159 string(11) "__construct" array(0) { } string(15) "stream_metadata" array(3) { [0]=> string(7) "abc://d" [1]=> int(6) [2]=> int(511) } string(10) "__destruct" array(0) { }
Output for 5.4.7 - 5.4.45, 5.5.0 - 5.5.38, 5.6.0 - 5.6.28, 7.0.0 - 7.0.20, 7.1.0 - 7.1.33, 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
string(11) "__construct" array(0) { } string(15) "stream_metadata" array(3) { [0]=> string(7) "abc://d" [1]=> int(6) [2]=> int(511) } string(10) "__destruct" array(0) { }
Output for 5.4.0 - 5.4.6
string(15) "stream_metadata" array(3) { [0]=> string(7) "abc://d" [1]=> int(6) [2]=> int(511) } string(10) "__destruct" array(0) { }

preferences:
242.84 ms | 405 KiB | 298 Q