我找到的大多数wordpress插件是functions based
, 例如,官方akismet
插件
function akismet_init() {
global $wpcom_api_key, $akismet_api_host, $akismet_api_port;
// ...
}
add_action(\'init\', \'akismet_init\');
There are a few issues with this approach:
<你不能在函数之间共享状态,因此你必须使用全局变量进行难以进行的单元测试,也就是说,没有办法模拟。我最初的尝试是包装成一个对象,例如akismet.php
class Akismet {
protected static $akismet_api_host;
protected static $akismet_api_port;
public function __construct()
{
add_action(\'init\', array($this, \'init\'));
}
public function init()
{
// Do my init here
}
}
$GLOBALS[\'Akismet\'] = new Akismet();
然而,这种方法仍然存在一些问题我需要将我的大多数方法作为公共方法来调用(这很糟糕)
- 例如。
public function __construct()
{
$foo = \'bar\';
add_action(\'init\', function() use ($foo) {
echo $foo; // You can pass variable by using callback but you cannot this action later!
});
}
那么,如何灵活地将变量传递到任何Wordpress的操作/过滤器中,同时保持稍后取消它们的灵活性呢?