primo commit
This commit is contained in:
70
libraries/fof40/Event/Observer.php
Normal file
70
libraries/fof40/Event/Observer.php
Normal file
@ -0,0 +1,70 @@
|
||||
<?php
|
||||
/**
|
||||
* @package FOF
|
||||
* @copyright Copyright (c)2010-2022 Nicholas K. Dionysopoulos / Akeeba Ltd
|
||||
* @license GNU General Public License version 3, or later
|
||||
*/
|
||||
|
||||
namespace FOF40\Event;
|
||||
|
||||
defined('_JEXEC') || die;
|
||||
|
||||
use ReflectionMethod;
|
||||
use ReflectionObject;
|
||||
|
||||
class Observer
|
||||
{
|
||||
/** @var Observable The object to observe */
|
||||
protected $subject;
|
||||
|
||||
protected $events;
|
||||
|
||||
/**
|
||||
* Creates the observer and attaches it to the observable subject object
|
||||
*
|
||||
* @param Observable $subject The observable object to attach the observer to
|
||||
*/
|
||||
function __construct(Observable &$subject)
|
||||
{
|
||||
// Attach this observer to the subject
|
||||
$subject->attach($this);
|
||||
|
||||
// Store a reference to the subject object
|
||||
$this->subject = $subject;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the list of events observable by this observer. Set the $this->events array manually for faster
|
||||
* processing, or let this method use reflection to return a list of all public methods.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getObservableEvents()
|
||||
{
|
||||
if (is_null($this->events))
|
||||
{
|
||||
// Assign an empty array to protect us from behaviours without any valid method
|
||||
$this->events = [];
|
||||
|
||||
$reflection = new ReflectionObject($this);
|
||||
$methods = $reflection->getMethods(ReflectionMethod::IS_PUBLIC);
|
||||
|
||||
foreach ($methods as $m)
|
||||
{
|
||||
if ($m->name == 'getObservableEvents')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($m->name == '__construct')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$this->events[] = $m->name;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->events;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user