Ok, so here is what I will do:

1. remove typehint & add throw an exception when `is_callable($callback)` returns false
2. use `call_user_func($callback, $this)` to invoke given callback