How I Usually do things when it comes to hooks is create a HookLoader class which will store two types of hooks, PRE and POST. as PHP Is a single threaded interpreter there would be no such thing as DURING.
Take this example:
$Hooks = new HookLoader();
$Hook->Run("PRE","database_connect");
$Database->Connect();
$Hook->Run("POST","database_connect");
each hook in the hook directory should be name like so:
name_pre_database_connect.hook.php
Hook files would be formatted like so:
{name}_{type}_{event}.hook.php
This will allow you to create unlimited amount of hooks.
preferably i would make hook class abstract and static, this you can just run the hook calls within the actual object, therefore adding new libraries would be integrated as long as they have the Hook::run("type","event");