| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 | <?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;/** * Event encapsulation class. * * Encapsulates events thus decoupling the observer from the subject they encapsulate. * * @author Drak <drak@zikula.org> */class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate{    protected $subject;    protected $arguments;    /**     * Encapsulate an event with $subject and $args.     *     * @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 The observer subject     */    public function getSubject()    {        return $this->subject;    }    /**     * Get argument by key.     *     * @param string $key Key     *     * @return mixed Contents of array key     *     * @throws \InvalidArgumentException if key is not found     */    public function getArgument($key)    {        if ($this->hasArgument($key)) {            return $this->arguments[$key];        }        throw new \InvalidArgumentException(sprintf('Argument "%s" not found.', $key));    }    /**     * Add argument to event.     *     * @param string $key   Argument name     * @param mixed  $value Value     *     * @return $this     */    public function setArgument($key, $value)    {        $this->arguments[$key] = $value;        return $this;    }    /**     * Getter for all arguments.     *     * @return array     */    public function getArguments()    {        return $this->arguments;    }    /**     * Set args property.     *     * @param array $args Arguments     *     * @return $this     */    public function setArguments(array $args = [])    {        $this->arguments = $args;        return $this;    }    /**     * Has argument.     *     * @param string $key Key of arguments array     *     * @return bool     */    public function hasArgument($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     */    #[\ReturnTypeWillChange]    public function getIterator()    {        return new \ArrayIterator($this->arguments);    }}
 |