3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Foo { private int $age; private string $name; public function __construct () { $this->age = rand(12, 60); } } class FooList { private array $elementsList = []; public function setList (array $newList): void { foreach ($newList as $key => $value) { if (!$value instanceof Foo) { throw new Exception("GOVNYAK!!!"); } } $this->elementsList = $newList; } public function getList (): array { return $this->elementsList; } public function addToList (mixed $element): void { // Тут не используется TypeHint, потому что класс FooList на самом деле базовый, от которого наследуются другие. Я ведь не могу сделать что-то типа `addToList ($this->expectedClass $element): void`, проверять приходится в коде. Да и один хрен в коде придётся проверять для метода `setList()`, потому что там тип array, а условное Foo[] в качестве типа в PHP не завезли. if (!$element instanceof Foo) { throw new Exception("GOVNYAK!!!"); } $this->elementsList[] = $element; } public function removeFromList (int $index): void { $tmpList = $this->getList(); array_splice($tmpList, $index, 1); // Вот а если тут ещё какой-то код, который дополнительно преобразовывает массив каким-то образом? Не знаю, сортирует там. И проверяет, чтобы сумма $age всех элементов массива не была больше X и меньше Y. array_splice уже выполнен, и если мы будем выполнять его не над $tmpList, а над $this->elementsList, то элемент один хрен будет удалён. Хотя на самом деле метод должен выкинуть исключение и откатить данные к тому состоянию, которое было до его вызова. $this->setList($tmpList); } } $lst = new FooList(); $fooOne = new Foo(); $fooTwo = new Foo(); $govnyak = new stdClass(); $lst->addToList($fooOne); $lst->addToList($fooTwo); var_dump($lst); $lst->addToList($govnyak);

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.00.0150.00528.09

preferences:
30.29 ms | 403 KiB | 5 Q