So I’ve been meaning to do this for some time: create a PHP plugin system. I saw the concept (hooks) first inside Drupal, and it’s the same technique I’ve used to implement plugins here.
Here’s what example.php looks like:
<?php
require_once("pluggable.php");
pluggable_init();
function hello() {
pluggable_serve("before_welcome_message");
$message = NULL;
pluggable_serve("replace_welcome_message", $message);
echo non_null_of($message, "Hello World");
echo "\n";
}
hello();
[/sourcecode]
<p>... and here's what an example plugin looks like:</p>
[sourcecode language='php']
<?php
/**
* Singh is King
* @package pluggable
* @author Vishnu Gopal
* @pluggable_hook before_welcome_message @with in_vish_singh_is_king
*/
/**
* Just prints a preface to the Hello World message
* @return string Singh is King
* Notice the plugin three_two_one is also using the same hook.
* Plugins are called in unspecified order.
*/
function in_vish_singh_is_king() {
echo "Singh is King!\n";
}
</pre>
The code is up here on github – the pluggable-php project – it’s a pretty concise at less than 100 sloc. Take a look at plugins/ for the examples and then fork away and do something useful with it!
Leave a Reply