123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- <?php
-
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
- namespace Symfony\Component\EventDispatcher;
-
- use Symfony\Contracts\EventDispatcher\Event;
-
- /**
- * Event encapsulation class.
- *
- * Encapsulates events thus decoupling the observer from the subject they encapsulate.
- *
- * @author Drak <drak@zikula.org>
- *
- * @implements \ArrayAccess<string, mixed>
- * @implements \IteratorAggregate<string, mixed>
- */
- class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate
- {
- protected $subject;
- protected $arguments;
-
- /**
- * Encapsulate an event with $subject and $arguments.
- *
- * @param mixed $subject The subject of the event, usually an object or a callable
- * @param array $arguments Arguments to store in the event
- */
- public function __construct($subject = null, array $arguments = [])
- {
- $this->subject = $subject;
- $this->arguments = $arguments;
- }
-
- /**
- * Getter for subject property.
- *
- * @return mixed
- */
- public function getSubject()
- {
- return $this->subject;
- }
-
- /**
- * Get argument by key.
- *
- * @return mixed
- *
- * @throws \InvalidArgumentException if key is not found
- */
- public function getArgument(string $key)
- {
- if ($this->hasArgument($key)) {
- return $this->arguments[$key];
- }
-
- throw new \InvalidArgumentException(sprintf('Argument "%s" not found.', $key));
- }
-
- /**
- * Add argument to event.
- *
- * @param mixed $value Value
- *
- * @return $this
- */
- public function setArgument(string $key, $value)
- {
- $this->arguments[$key] = $value;
-
- return $this;
- }
-
- /**
- * Getter for all arguments.
- *
- * @return array
- */
- public function getArguments()
- {
- return $this->arguments;
- }
-
- /**
- * Set args property.
- *
- * @return $this
- */
- public function setArguments(array $args = [])
- {
- $this->arguments = $args;
-
- return $this;
- }
-
- /**
- * Has argument.
- *
- * @return bool
- */
- public function hasArgument(string $key)
- {
- return \array_key_exists($key, $this->arguments);
- }
-
- /**
- * ArrayAccess for argument getter.
- *
- * @param string $key Array key
- *
- * @return mixed
- *
- * @throws \InvalidArgumentException if key does not exist in $this->args
- */
- #[\ReturnTypeWillChange]
- public function offsetGet($key)
- {
- return $this->getArgument($key);
- }
-
- /**
- * ArrayAccess for argument setter.
- *
- * @param string $key Array key to set
- * @param mixed $value Value
- *
- * @return void
- */
- #[\ReturnTypeWillChange]
- public function offsetSet($key, $value)
- {
- $this->setArgument($key, $value);
- }
-
- /**
- * ArrayAccess for unset argument.
- *
- * @param string $key Array key
- *
- * @return void
- */
- #[\ReturnTypeWillChange]
- public function offsetUnset($key)
- {
- if ($this->hasArgument($key)) {
- unset($this->arguments[$key]);
- }
- }
-
- /**
- * ArrayAccess has argument.
- *
- * @param string $key Array key
- *
- * @return bool
- */
- #[\ReturnTypeWillChange]
- public function offsetExists($key)
- {
- return $this->hasArgument($key);
- }
-
- /**
- * IteratorAggregate for iterating over the object like an array.
- *
- * @return \ArrayIterator<string, mixed>
- */
- #[\ReturnTypeWillChange]
- public function getIterator()
- {
- return new \ArrayIterator($this->arguments);
- }
- }
|