interface Iplugin
{
public static
function getName();
}
function findPlugins()
{
$plugins = array();
foreach(get_declared_classes() as $class)
{
$reflectionClass = new ReflectionClass($class);
if ($reflectionClass - > implementsInterface('Iplugin'))
{
$plugins[] = $reflectionClass;
}
}
return $plugins;
}
function computeMenu()
{
$menu = array();
foreach(findPlugins() as $plugin)
{
if ($plugin - > hasMethod('getMenuItems'))
{
$reflectionMethod = $plugin - > getMethod('getMenuItems');
if ($reflectionMethod - > isStatic())
{
$items = $reflectionMethod - > invoke(null);
}
else
{
$pluginInstance = $plugin - > newInstance();
$items = $reflectionMethod - > invoke($pluginInstance);
}
$menu = array_merge($menu, $items);
}
}
return $menu;
}
function computeArticles()
{
$articles = array();
foreach(findPlugins() as $plugin)
{
if ($plugin - > hasMethod('getArticles'))
{
$reflectionMethod = $plugin - > getMethod('getArticles');
if ($reflectionMethod - > isStatic())
{
$items = $reflectionMethod - > invoke(null);
}
else
{
$pluginInstance = $plugin - > newInstance();
$items = $reflectionMethod - > invoke($pluginInstance);
}
$articles = array_merge($articles, $items);
}
}
return $articles;
}
require_once('plugin.php');
$menu = computeMenu();
$articles = computeArticles();
print_r($menu);
print_r($articles);