<?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 ' . $offset . PHP_EOL;
unset($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) {
var_dump($index);
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/lCiTF 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/lCiTF 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/lCiTF 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/lCiTF 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/lCiTF on line 36
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/lCiTF on line 41
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/lCiTF on line 46
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/lCiTF on line 51
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/lCiTF on line 56
int(0)
trying to unset 0
int(2)
trying to unset 2
int(4)
trying to unset 4
int(6)
trying to unset 6
int(8)
trying to unset 8
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/lCiTF on line 7
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/lCiTF on line 7
int(0)
trying to unset 0
int(2)
trying to unset 2
int(4)
trying to unset 4
int(6)
trying to unset 6
int(8)
trying to unset 8
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/lCiTF on line 7
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/lCiTF on line 7
int(0)
Notice: Use of undefined constant PHP_EOL - assumed 'PHP_EOL' in /in/lCiTF on line 32
trying to unset 0PHP_EOLint(2)
Notice: Use of undefined constant PHP_EOL - assumed 'PHP_EOL' in /in/lCiTF on line 32
trying to unset 2PHP_EOLint(4)
Notice: Use of undefined constant PHP_EOL - assumed 'PHP_EOL' in /in/lCiTF on line 32
trying to unset 4PHP_EOLint(6)
Notice: Use of undefined constant PHP_EOL - assumed 'PHP_EOL' in /in/lCiTF on line 32
trying to unset 6PHP_EOLint(8)
Notice: Use of undefined constant PHP_EOL - assumed 'PHP_EOL' in /in/lCiTF on line 32
trying to unset 8PHP_EOLMyCollectionModel 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/lCiTF on line 7
Process exited with code 255.