知乎专栏 |
插件系统分为:
插件管理平台
插件探测
插件注册
插件调用
插件注销
<?php final class Plugin{ private $plugins = null; private $directory = 'plugins'; private $path = null; public function __construct(){ $this->path = $this->directory.'/'; } public function autoload(){ $interfaces = scandir($this->directory); unset($interfaces[0]); unset($interfaces[1]); foreach($interfaces as $interface) { //load all of the plugins $file = $this->path . $interface; if (@file_exists($file)) { include_once($file); $class = basename($interface, ".php"); if (class_exists($class)) { $this->$class = new $class($this); $vars = get_class_vars($class); $entity['name'] = $vars['name']; $entity['description'] = $vars['description']; $entity['author'] = $vars['author']; $entity['class'] = $class; $entity['methods'] = get_class_methods($class); $this->plugins[$class] = $entity; } } } } public function load($plugin){ $file = $this->path . $plugin . '.php'; if (@file_exists($file)) { include_once($file); $class = $plugin; if (class_exists($class)) { $this->$class = new $class($this); $vars = get_class_vars($class); $entity['name'] = $vars['name']; $entity['description'] = $vars['description']; $entity['author'] = $vars['author']; $entity['class'] = $class; $entity['methods'] = get_class_methods($class); $this->plugins[$class] = $entity; } } } public function show(){ print_r($this->plugins); } }
<?php final class demo implements iPlugin{ public static $author = 'Neo Chen<openunix@163.com>'; public static $name = 'Demo'; public static $description = 'Demo Simple'; public function __construct(){ } public function test(){ echo 'Hello world!!!'; } }
<?php function __autoload($class_name) { require_once('library/'.$class_name . '.php'); } //include_once('library/Plugin.php'); $plugin = new Plugin(); echo '============================='; $plugin->load('demo'); $plugin->demo->test(); echo '============================='; $plugin->autoload(); $plugin->show();