Ketika bekerja dengan objek, terkadang kita lupa untuk memanfaatkan event sebagai bagian yang tak terlepaskan dari behaviour sebuah objek. Dengan event, kita dapat saling berkomunikasi dengan entitas lain di luar objek dan objek yang kita buat bisa bekerja secara independen (decoupless).

Dalam artikel ini, penulis akan memberikan potongan kecil sebuah class yang dilengkapi dengan pemanfaatan event.


class DB {

    protected $db;
    protected $listeners;

    public function __construct() {
        $this->db = null;
        $this->listeners = array();
    }

    public function connect() {
        $this->db = mysqli_connect(/*...*/);
        $this->fire('connect', TRUE);
    }

    public function on($event, $callback) {
        if ( ! isset($this->listeners[$event])) {
            $this->listeners[$event] = array();
        }
        $this->listeners[$event][] = $callback;
    }

    public function fire() {
        $args = func_get_args();
        $type = array_shift($args);

        if (isset($this->listeners[$type])) {
            $func = $this->listeners[$type];
            $size = count($func);

            for ($i = 0; $i < $size; $i++) {
                call_user_func_array($func[$i], $args);
            }
        }
    }

}

Contoh penggunaannya:


$db = new DB();

$db->on('connect', function($status){
    var_dump($status);
});

$db->connect();

Advertisements