В
Size: a a a
В
В
В
final class Dispatcher implements EventDispatcherInterface
{
private ListenerProviderInterface $listenerProvider;
public function __construct(ListenerProviderInterface $listenerProvider)
{
$this->listenerProvider = $listenerProvider;
}
public function dispatch(object $event): object
{
foreach ($this->listenerProvider->getListenersForEvent($event) as $listener) {
$listener(clone $event);
}
return $event;
}
}
В
__clone
, который такое клонирование поломает.СП
В
СП
В
AB
В
&
), ты имеешь дело со ссылкой на ячейку памяти, и меняешь ее, а не сам объект.В
StoppableEvent
, например). И все это - в цикле.AB
StoppableEvent
, например). И все это - в цикле.public function dispatch(object $event): object
{
$id = spl_object_id($event);
foreach ($this->listenerProvider->getListenersForEvent($event) as $listener) {
$listener($event);
}
if ($id !== spl_object_id($event)) {
throw new \LogicException();
}
return $event;
}
AB
В
AB
spl_object_id
норм сработает? Исходный объект ведь уничтожен, получается. Хотя, если через замыкание... То тогда смысл теряется, разве что исключение ради исключения кидать. Вообще, spl_object_id
никогда не использовал.В
В
СП
&
), ты имеешь дело со ссылкой на ячейку памяти, и меняешь ее, а не сам объект.В
СП