3v4l.org

run code in 300+ PHP versions simultaneously
<?php namespace Acme { class Collection { private $_items; public function __construct(array $items = [])/*: void*/ { $this->_items = $items; } public function filter(callable $callback): self { foreach ($this->_items as $key => $value) { if (!call_user_func($callback, $value)) { unset($this->_items[$key]); } } return $this; } public function map(callable $callback): self { foreach ($this->_items as $key => $value) { $this->_items[$key] = call_user_func($callback, $key, $value); } return $this; } public function reindex(): self { $this->_items = array_values($this->_items); } public function sprintf(string $format): self { return $this->map(function ($key, $value) use ($format) { return substr_count($format, '%s') === 1 ? sprintf($format, $value) : sprintf($format, $key, $value); }); } public function implode(string $delimiter = ''): string { $output = ''; $first = TRUE; foreach ($this->_items as $value) { if ($first) { $output .= $value; $first = FALSE; } else { $output .= "$delimiter$value"; } } return $output; } public static function property(string $property): callable { return function ($key, $value) use ($name) { return $value->$property; }; } } } namespace { use Acme\Collection; echo (new Collection([ 'one', 'two', (object)['foo' => 'FOO', 'bar' => 'BAR', 'baz' => 'BAZ'], 'three', (object)['bar' => 'BAR', 'qux' => 'QUX'], ])) ->filter('is_object') ->map(Collection::property('bar')) ->reindex() ->sprintf('(%s,%s)') ->implode('_'); }
Output for 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.6
Warning: Undefined variable $name in /in/Y5jbr on line 47 Warning: Undefined variable $property in /in/Y5jbr on line 48 Warning: Undefined property: stdClass::$ in /in/Y5jbr on line 48 Warning: Undefined variable $property in /in/Y5jbr on line 48 Warning: Undefined property: stdClass::$ in /in/Y5jbr on line 48 Fatal error: Uncaught TypeError: Acme\Collection::reindex(): Return value must be of type Acme\Collection, none returned in /in/Y5jbr:25 Stack trace: #0 /in/Y5jbr(66): Acme\Collection->reindex() #1 {main} thrown in /in/Y5jbr on line 25
Process exited with code 255.
Output for 7.1.0 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.31, 7.4.0 - 7.4.33
Notice: Undefined variable: name in /in/Y5jbr on line 47 Notice: Undefined variable: property in /in/Y5jbr on line 48 Notice: Undefined property: stdClass::$ in /in/Y5jbr on line 48 Notice: Undefined variable: property in /in/Y5jbr on line 48 Notice: Undefined property: stdClass::$ in /in/Y5jbr on line 48 Fatal error: Uncaught TypeError: Return value of Acme\Collection::reindex() must be an instance of Acme\Collection, none returned in /in/Y5jbr:25 Stack trace: #0 /in/Y5jbr(66): Acme\Collection->reindex() #1 {main} thrown in /in/Y5jbr on line 25
Process exited with code 255.
Output for 7.3.32 - 7.3.33
Fatal error: Uncaught TypeError: Return value of Acme\Collection::reindex() must be an instance of Acme\Collection, none returned in /in/Y5jbr:25 Stack trace: #0 /in/Y5jbr(66): Acme\Collection->reindex() #1 {main} thrown in /in/Y5jbr on line 25
Process exited with code 255.
Output for 7.0.0 - 7.0.33
Notice: Undefined variable: name in /in/Y5jbr on line 47 Notice: Undefined variable: property in /in/Y5jbr on line 48 Fatal error: Uncaught Error: Cannot access empty property in /in/Y5jbr:48 Stack trace: #0 [internal function]: Acme\Collection::Acme\{closure}(2, Object(stdClass)) #1 /in/Y5jbr(19): call_user_func(Object(Closure), 2, Object(stdClass)) #2 /in/Y5jbr(65): Acme\Collection->map(Object(Closure)) #3 {main} thrown in /in/Y5jbr on line 48
Process exited with code 255.
Output for 5.5.0 - 5.5.38, 5.6.0 - 5.6.38
Parse error: syntax error, unexpected ':', expecting ';' or '{' in /in/Y5jbr on line 9
Process exited with code 255.

preferences:
257.06 ms | 402 KiB | 324 Q