2015-08-17 17:00:26 -07:00
< ? 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
{
/**
* Event subject .
*
* @ var mixed usually object or callable
*/
protected $subject ;
/**
* Array of arguments .
*
* @ var array
*/
protected $arguments ;
/**
* Encapsulate an event with $subject and $args .
*
2017-02-02 16:28:38 -08:00
* @ param mixed $subject The subject of the event , usually an object
* @ param array $arguments Arguments to store in the event
2015-08-17 17:00:26 -07:00
*/
public function __construct ( $subject = null , array $arguments = array ())
{
$this -> subject = $subject ;
$this -> arguments = $arguments ;
}
/**
* Getter for subject property .
*
2017-02-02 16:28:38 -08:00
* @ return mixed $subject The observer subject
2015-08-17 17:00:26 -07:00
*/
public function getSubject ()
{
return $this -> subject ;
}
/**
* Get argument by key .
*
2017-02-02 16:28:38 -08:00
* @ param string $key Key
2015-08-17 17:00:26 -07:00
*
2017-02-02 16:28:38 -08:00
* @ return mixed Contents of array key
2015-08-17 17:00:26 -07:00
*
2017-02-02 16:28:38 -08:00
* @ throws \InvalidArgumentException If key is not found .
2015-08-17 17:00:26 -07:00
*/
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 .
*
2017-02-02 16:28:38 -08:00
* @ param string $key Argument name
* @ param mixed $value Value
2015-08-17 17:00:26 -07:00
*
2017-02-02 16:28:38 -08:00
* @ return $this
2015-08-17 17:00:26 -07:00
*/
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 .
*
2017-02-02 16:28:38 -08:00
* @ param array $args Arguments
2015-08-17 17:00:26 -07:00
*
2017-02-02 16:28:38 -08:00
* @ return $this
2015-08-17 17:00:26 -07:00
*/
public function setArguments ( array $args = array ())
{
$this -> arguments = $args ;
return $this ;
}
/**
* Has argument .
*
2017-02-02 16:28:38 -08:00
* @ param string $key Key of arguments array
2015-08-17 17:00:26 -07:00
*
* @ return bool
*/
public function hasArgument ( $key )
{
return array_key_exists ( $key , $this -> arguments );
}
/**
* ArrayAccess for argument getter .
*
2017-02-02 16:28:38 -08:00
* @ param string $key Array key
2015-08-17 17:00:26 -07:00
*
* @ return mixed
2017-02-02 16:28:38 -08:00
*
* @ throws \InvalidArgumentException If key does not exist in $this -> args .
2015-08-17 17:00:26 -07:00
*/
public function offsetGet ( $key )
{
return $this -> getArgument ( $key );
}
/**
* ArrayAccess for argument setter .
*
2017-02-02 16:28:38 -08:00
* @ param string $key Array key to set
* @ param mixed $value Value
2015-08-17 17:00:26 -07:00
*/
public function offsetSet ( $key , $value )
{
$this -> setArgument ( $key , $value );
}
/**
* ArrayAccess for unset argument .
*
2017-02-02 16:28:38 -08:00
* @ param string $key Array key
2015-08-17 17:00:26 -07:00
*/
public function offsetUnset ( $key )
{
if ( $this -> hasArgument ( $key )) {
unset ( $this -> arguments [ $key ]);
}
}
/**
* ArrayAccess has argument .
*
2017-02-02 16:28:38 -08:00
* @ param string $key Array key
2015-08-17 17:00:26 -07:00
*
* @ return bool
*/
public function offsetExists ( $key )
{
return $this -> hasArgument ( $key );
}
/**
* IteratorAggregate for iterating over the object like an array .
*
* @ return \ArrayIterator
*/
public function getIterator ()
{
return new \ArrayIterator ( $this -> arguments );
}
}