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).
Version | System time (s) | User time (s) | Memory (MiB) |
---|---|---|---|
8.3.0 | 0.015 | 0.005 | 28.09 |
<?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).
Version | System time (s) | User time (s) | Memory (MiB) |
---|---|---|---|
8.3.0 | 0.015 | 0.005 | 28.09 |