84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
只求能实现类似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的插件机制 实现的很简单 优雅