<?php
class MyModel
{
}
class Collection implements \ArrayAccess, \Iterator
{
private $storage = array();
public function offsetExists($offset)
{
return isset($this->storage[$offset]);
}
public function offsetGet($offset)
{
return $this->storage[$offset];
}
public function offsetSet($offset, $value)
{
if (null === $offset) {
$this->storage[] = $value;
} else {
$this->storage[$offset] = $value;
}
}
public function offsetUnset($offset)
{
echo 'trying to unset' . PHP_EOL;
unset($this->storage[$offset]);
var_dump($this->storage[$offset]);
}
public function current()
{
return current($this->storage);
}
public function next()
{
return next($this->storage);
}
public function key()
{
return key($this->storage);
}
public function valid()
{
return key($this->storage) !== null;
}
public function rewind()
{
reset($this->storage);
}
public function count()
{
return count($this->storage);
}
}
class MyCollectionModel
{
private $collection;
public function __construct()
{
$this->collection = new Collection();
}
public function addElement($element)
{
$this->collection[] = $element;
}
public function removeMyModels()
{
foreach ($this->collection as $index => $value) {
if ($value instanceof MyModel) {
unset ($this->collection[$index]);
}
}
}
}
// Создем коллекцию
$myCollection = new MyCollectionModel();
// Заполняем своими можельками
for ($i = 0; $i < 10; $i++) {
$myCollection->addElement(new MyModel());
}
// Удаляем свои модельки
$myCollection->removeMyModels();
// Сука, ебучая PHP!!!
print_r($myCollection);
Deprecated: Return type of Collection::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/nsg7N on line 11
Deprecated: Return type of Collection::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/nsg7N on line 16
Deprecated: Return type of Collection::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/nsg7N on line 21
Deprecated: Return type of Collection::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/nsg7N on line 30
Deprecated: Return type of Collection::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/nsg7N on line 37
Deprecated: Return type of Collection::next() should either be compatible with Iterator::next(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/nsg7N on line 42
Deprecated: Return type of Collection::key() should either be compatible with Iterator::key(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/nsg7N on line 47
Deprecated: Return type of Collection::valid() should either be compatible with Iterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/nsg7N on line 52
Deprecated: Return type of Collection::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/nsg7N on line 57
trying to unset
Warning: Undefined array key 0 in /in/nsg7N on line 34
NULL
trying to unset
Warning: Undefined array key 2 in /in/nsg7N on line 34
NULL
trying to unset
Warning: Undefined array key 4 in /in/nsg7N on line 34
NULL
trying to unset
Warning: Undefined array key 6 in /in/nsg7N on line 34
NULL
trying to unset
Warning: Undefined array key 8 in /in/nsg7N on line 34
NULL
MyCollectionModel Object
(
[collection:MyCollectionModel:private] => Collection Object
(
[storage:Collection:private] => Array
(
[1] => MyModel Object
(
)
[3] => MyModel Object
(
)
[5] => MyModel Object
(
)
[7] => MyModel Object
(
)
[9] => MyModel Object
(
)
)
)
)
Output for 8.0.0 - 8.0.30
trying to unset
Warning: Undefined array key 0 in /in/nsg7N on line 34
NULL
trying to unset
Warning: Undefined array key 2 in /in/nsg7N on line 34
NULL
trying to unset
Warning: Undefined array key 4 in /in/nsg7N on line 34
NULL
trying to unset
Warning: Undefined array key 6 in /in/nsg7N on line 34
NULL
trying to unset
Warning: Undefined array key 8 in /in/nsg7N on line 34
NULL
MyCollectionModel Object
(
[collection:MyCollectionModel:private] => Collection Object
(
[storage:Collection:private] => Array
(
[1] => MyModel Object
(
)
[3] => MyModel Object
(
)
[5] => MyModel Object
(
)
[7] => MyModel Object
(
)
[9] => MyModel Object
(
)
)
)
)
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/nsg7N on line 7
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/nsg7N on line 7
trying to unset
Notice: Undefined offset: 0 in /in/nsg7N on line 34
NULL
trying to unset
Notice: Undefined offset: 2 in /in/nsg7N on line 34
NULL
trying to unset
Notice: Undefined offset: 4 in /in/nsg7N on line 34
NULL
trying to unset
Notice: Undefined offset: 6 in /in/nsg7N on line 34
NULL
trying to unset
Notice: Undefined offset: 8 in /in/nsg7N on line 34
NULL
MyCollectionModel Object
(
[collection:private] => Collection Object
(
[storage:private] => Array
(
[1] => MyModel Object
(
)
[3] => MyModel Object
(
)
[5] => MyModel Object
(
)
[7] => MyModel Object
(
)
[9] => MyModel Object
(
)
)
)
)
Output for 5.0.0 - 5.0.1
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/nsg7N on line 7
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/nsg7N on line 7
Notice: Use of undefined constant PHP_EOL - assumed 'PHP_EOL' in /in/nsg7N on line 32
trying to unsetPHP_EOL
Notice: Undefined offset: 0 in /in/nsg7N on line 34
NULL
Notice: Use of undefined constant PHP_EOL - assumed 'PHP_EOL' in /in/nsg7N on line 32
trying to unsetPHP_EOL
Notice: Undefined offset: 2 in /in/nsg7N on line 34
NULL
Notice: Use of undefined constant PHP_EOL - assumed 'PHP_EOL' in /in/nsg7N on line 32
trying to unsetPHP_EOL
Notice: Undefined offset: 4 in /in/nsg7N on line 34
NULL
Notice: Use of undefined constant PHP_EOL - assumed 'PHP_EOL' in /in/nsg7N on line 32
trying to unsetPHP_EOL
Notice: Undefined offset: 6 in /in/nsg7N on line 34
NULL
Notice: Use of undefined constant PHP_EOL - assumed 'PHP_EOL' in /in/nsg7N on line 32
trying to unsetPHP_EOL
Notice: Undefined offset: 8 in /in/nsg7N on line 34
NULL
MyCollectionModel Object
(
[collection:private] => Collection Object
(
[storage:private] => Array
(
[1] => MyModel Object
(
)
[3] => MyModel Object
(
)
[5] => MyModel Object
(
)
[7] => MyModel Object
(
)
[9] => MyModel Object
(
)
)
)
)
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STRING, expecting '{' in /in/nsg7N on line 7
Process exited with code 255.