【发布时间】:2014-04-21 00:44:17
【问题描述】:
我是第一次尝试 PHP+WP。我打算使用 WP 插件挂钩。作为一名 C++ 程序员,我还打算将所有代码放入类中。目前我有点坚持以下应该安装 WP 插件挂钩的 sn-p:
class SettingsHandler
{
public function __construct()
{
add_filter('plugin_action_links', array($this, 'AddSettingsLink'), 10, 2);
}
private function AddSettingsLink($links, $file)
{
if ($file==plugin_basename(__FILE__))
{
$settings_link = '<a href="options-general.php?page=options_page">Settings</a>';
array_unshift($links, $settings_link);
}
return $links;
}
}
$settingsHandler = new SettingsHandler();
这给了我一条错误消息: 警告:call_user_func_array() 期望参数 1 为有效回调,无法访问 E:\xampp\apps\wordpress\htdocs\wp-includes\plugin.php 中的私有方法 SettingsHandler::AddSettingsLink() 199 行
当我将回调切换为公开时,错误消失了。看来我不能在 PHP/WP 中使用私有方法作为回调。这将是非常糟糕的,因为它揭示了许多不应被其他任何人直接访问的回调方法。我可以将此类回调设为私有吗?
我还发现了以下运行良好的 sn-p:
class a
{
public function __construct()
{
$str = " test test ";
$result = preg_replace_callback('/test/', array($this, 'callback'), $str);
echo $result;
}
private function callback($m)
{
return 'replaced';
}
}
$a = new a();
为什么第二个 sn-p 工作而第一个失败?区别在哪里?
【问题讨论】:
-
您的第一个回调不是从您的对象上下文中调用的,而是从外部插件处理程序中调用的。那为什么还要坚持回调方法私有呢?
-
为此类私有方法编写包装器(公共方法)并将这些包装器作为回调传递。
标签: php callback wordpress private