用户自定义方法扩展
通过 Filter_Plugin_Member_Call 接口,可以为 Z-BlogPHP 的用户对象添加自定义方法:当插件或模板代码调用 Member 对象上未定义的方法时,系统会进入本接口,由回调完成方法的具体逻辑并返回结果。
接口信息
| 接口 | 参数 | 说明 |
|---|---|---|
Filter_Plugin_Member_Call | &$member, $method, $args | Member 类的魔术方法接口 |
完整案例
下例为用户对象定义一个自定义方法 GetAvatarHtml($size),调用后返回指定尺寸的头像 img 标签:
php
<?php
RegisterPlugin("demoAPP", "ActivePlugin_demoAPP");
function ActivePlugin_demoAPP()
{
Add_Filter_Plugin('Filter_Plugin_Member_Call', 'demoAPP_Member_Call');
}
function demoAPP_Member_Call(&$member, $method, $args)
{
global $zbp;
if ($method != 'GetAvatarHtml') {
// 不是本插件定义的方法时立即返回
return;
}
$size = isset($args[0]) ? (int) $args[0] : 48;
// 置位 RETURN 信号,让本次返回值作为方法调用的结果
$GLOBALS['Filter_Plugin_Member_Call']['demoAPP_Member_Call'] = PLUGIN_EXITSIGNAL_RETURN;
return '<img src="' . $member->Avatar . '" alt="' . $member->StaticName . '" width="' . $size . '" height="' . $size . '" />';
}注册后即可在插件或模板代码中调用:
php
echo $member->GetAvatarHtml(80);注意事项
- 核心程序当前未调用此接口(预留接口):只有当插件、主题或模板代码自行调用用户对象上未定义的方法时才会触发,系统流程中不会自动执行;
- 回调返回值需配合
PLUGIN_EXITSIGNAL_RETURN信号才能生效,信号在每次生效后被系统重置,要在回调内每次置位(如案例写法);不置位时返回值会被忽略; - 多个插件都注册本接口时,系统按注册顺序逐个调用,第一个成功置位并返回的回调生效,回调开头应先判断
$method是否为本插件定义的方法; $args参数是调用时传入的实参数组,取值前建议用isset判断默认值。