84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
只求能实现类似wordpress、微盟、discuz那样基于core/plugin的设计架构
wordpress
微盟
discuz
core/plugin
ps:我觉得这样的设计才符合php的特性
认证0级讲师
http://justcoding.iteye.com/b...这篇文章应该可以作为参考。
话说我最近也准备给自己的项目加上插件功能,不过是打算以 OOP 的方式实现并且放在服务容器里的,和题主正好相反呢。
WordPress的钩子机制(事件驱动,消息处理):add_filter / apply_filters 队列过滤模块:收到消息后,按顺序过滤元内容.add_action / do_action 队列处理模块:收到消息后,接收元内容,进行一系列任务.
cd /path/to/wordpress grep -rnIE 'add_filter|apply_filters|add_action|do_action' ./ ./wp-content/plugins/akismet/class.akismet.php:25: add_action( 'wp_insert_comment', array( 'Akismet', 'auto_check_update_meta' ), 10, 2 ); ./wp-includes/comment.php:2149: do_action( 'wp_insert_comment', $id, $comment ); ./wp-content/plugins/akismet/class.akismet.php:26: add_filter( 'preprocess_comment', array( 'Akismet', 'auto_check_comment' ), 1 ); ./wp-includes/comment.php:2268: $commentdata = apply_filters( 'preprocess_comment', $commentdata );
我感觉WordPress实现的插件机制也是挺复杂的,对性能影响貌似也挺大的,在需要扩展的地方都得先放好钩子,才能在这个地方开发插件进行扩展.
我说说我的另一个思路,不要OOP,不要设计模式,而且还简单直观:首先,所有应用自带的函数都放在 /include/functions.php 里./include/common.php 里先包含插件函数,最后包含系统函数:
/include/functions.php
/include/common.php
require APP_ROOT.'content/plugins/wp_plugin_1/functions.php'; require APP_ROOT.'content/plugins/wp_plugin_2/functions.php'; require APP_ROOT.'include/functions.php';
所有functions.php都先判断函数是否存在再进行定义:
functions.php
if(!function_exists('wp_func')) { function wp_func() { // 插件重写系统函数 } } else { // 提示冲突,插件启用失败 // 系统函数functions.php里定义的函数不需要这个else判断 // 系统里需要开放扩展的函数才进行function_exists判断 }
也就是通过重写函数来实现扩展,这是我的愚见.
楼主可以参考typecho的插件机制 实现的很简单 优雅
http://justcoding.iteye.com/b...
这篇文章应该可以作为参考。
话说我最近也准备给自己的项目加上插件功能,不过是打算以 OOP 的方式实现并且放在服务容器里的,和题主正好相反呢。
WordPress的钩子机制(事件驱动,消息处理):
add_filter / apply_filters 队列过滤模块:收到消息后,按顺序过滤元内容.
add_action / do_action 队列处理模块:收到消息后,接收元内容,进行一系列任务.
我感觉WordPress实现的插件机制也是挺复杂的,对性能影响貌似也挺大的,在需要扩展的地方都得先放好钩子,才能在这个地方开发插件进行扩展.
我说说我的另一个思路,不要OOP,不要设计模式,而且还简单直观:
首先,所有应用自带的函数都放在
/include/functions.php
里./include/common.php
里先包含插件函数,最后包含系统函数:所有
functions.php
都先判断函数是否存在再进行定义:也就是通过重写函数来实现扩展,这是我的愚见.
楼主可以参考typecho的插件机制 实现的很简单 优雅