Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 2d12ce06a6
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 80 lines (74 sloc) 1.741 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
<?php
namespace shozu;
/**
* Observer
*
* Observe / Notify events
*/
final class Observer
{
    private static $events = array(); // events callback

    /**
* Observe event
*
* <code>
* Observer::observe('system.shutdown', array('Profiler', 'display'));
* </code>
*
* @param string
* @param mixed
*/
    public static function observe($name, $callback)
    {
        if (!isset(self::$events[$name]))
        {
            self::$events[$name] = array();
        }
        self::$events[$name][] = $callback;
    }

    /**
* Detach a callback to an event queue.
*/
    public static function clear($name, $callback=false)
    {
        if ( ! $callback)
        {
            self::$events[$name] = array();
        }
        else if (isset(self::$events[$name]))
        {
            foreach (self::$events[$name] as $i => $event_callback)
            {
                if ($callback === $event_callback)
                {
                    unset(self::$events[$name][$i]);
                }
            }
        }
    }

    public static function get($name)
    {
        return empty(self::$events[$name]) ? array(): self::$events[$name];
    }

    /**
* Notify event
*
* <code>
* Observer::notify('system.execute');
* </code>
*
* @param string
*/
    public static function notify($name)
    {
        // removing event name from the arguments
        $args = func_num_args() > 1 ? array_slice(func_get_args(), 1): array();

        foreach (self::get($name) as $callback)
        {
            //if(is_callable($callback))
            //{
                call_user_func_array($callback, $args);
            //}
        }
    }
}
Something went wrong with that request. Please try again.