В
Size: a a a
В
AB
class Foo
{
public function __construct()
{
echo 'construct '. spl_object_id($this) . \PHP_EOL;
}
public function __destruct()
{
echo 'destruct '. spl_object_id($this) . \PHP_EOL;
}
}
$object = new Foo();
echo 'begin '. spl_object_id($object) . \PHP_EOL;
$object = new Foo();
echo 'end '. spl_object_id($object) . \PHP_EOL;
AB
В
В
В
AB
AB
$object = new Foo();
echo 'begin '. spl_object_id($object) . \PHP_EOL;
$object = null;
$object = new Foo();
echo 'end '. spl_object_id($object) . \PHP_EOL;
В
public static function listener(&$event) {
unset($event);
$event = new AnotherEvent();
}
В
$object = new Foo();
echo 'begin '. spl_object_id($object) . \PHP_EOL;
$object = null;
$object = new Foo();
echo 'end '. spl_object_id($object) . \PHP_EOL;
AB
AB
function evil(&$event) {
$event = null;
$event = new Foo();
}
function dispatch($event) {
evil($event);
return $event;
}
$object = new Foo();
echo 'begin '. spl_object_id($object) . \PHP_EOL;
$result = dispatch($object);
echo 'end '. spl_object_id($result) . \PHP_EOL;
AB
function evil(&$event) {
$event = null;
$event = new Foo();
}
function dispatch($event) {
$save = $event;
evil($event);
echo 'saved '. spl_object_id($save) . \PHP_EOL;
return $event;
}
$object = new Foo();
echo 'begin '. spl_object_id($object) . \PHP_EOL;
$result = dispatch($object);
echo 'end '. spl_object_id($result) . \PHP_EOL;
AB
public function dispatch(object $event): object
{
$savedEvent = $event;
foreach ($this->listenerProvider->getListenersForEvent($event) as $listener) {
$listener($event);
}
if ($savedEvent !== $event) {
throw new \LogicException();
}
return $event;
}
А
А
В
А
В
public function dispatch(object $event): object
{
$savedEvent = $event;
foreach ($this->listenerProvider->getListenersForEvent($event) as $listener) {
$listener($event);
}
if ($savedEvent !== $event) {
throw new \LogicException();
}
return $event;
}