在开发插件时,为了避免对所有函数和变量使用前缀,通常会对插件代码使用包装器。我在许多地方看到了使用类的实践,我想将其与简单地使用函数作为包装器进行比较。
A、 类包装器
class Nice_Plugin {
var $plugin_dir = plugin_dir_url(__FILE__);
function __contruct() {
is_admin() ? $this->build_admin() : $this->build_public();
}
function build_admin() {
register_activation_hook(__FILE__, array($this, \'activate\'));
register_deactivation_hook(__FILE__, array($this, \'deactivate\'));
register_uninstall_hook(__FILE__, array($this, \'uninstall\'));
}
function build_public() {
add_action(\'wp_enqueue_scripts\', array($this, \'add_scripts\'));
add_action(\'wp_footer\', array($this, \'add_html\'));
}
public function activate() {}
public function deactivate() {}
public function uninstall() {}
public function add_scripts() {}
public function add_html() {}
}
new Nice_Plugin();
B.函数包装器function nice_plugin() {
$plugin_dir = plugin_dir_url(__FILE__);
is_admin() ? build_admin() : build_public();
function build_admin() {
register_activation_hook(__FILE__, \'activate\');
register_deactivation_hook(__FILE__, \'deactivate\');
register_uninstall_hook(__FILE__, \'uninstall\');
}
function build_public() {
add_action(\'wp_enqueue_scripts\', \'add_scripts\');
add_action(\'wp_footer\', \'add_html\');
}
function activate() {}
function deactivate() {}
function uninstall() {}
function add_scripts() {}
function add_html() {}
}
nice_plugin();
我已经测试了这两个,它们工作得很好。(我想指出的是,我正在开始学习WP开发和我在这里介绍的结构,尽管为了满足我项目的当前需求,可能需要为更复杂的项目进行更改。这就是为什么我在这里向有更多经验的人询问未来可能会发生什么以及什么是更好的做法。)
虽然我喜欢类和OOP,但我倾向于方法B,原因如下:
我认为应该尽可能简单,如果给出两个类似的解决方案,越简单越好。如果没有很好的理由定义一个类并创建一个对象,那么简单地使用函数作为包装似乎更好
上述做法是否都有效额外问题:
关于案例B,我不太明白一点:如果只传递字符串名称,挂钩如何获得目标函数的作用域例如,如果您在全局范围内:
function niceplugin_add_scripts() {}
add_action(\'wp_enqueue_scripts\', \'niceplugin_add_scripts\');
在本例中,我假设字符串名称用于从全局范围调用函数。但是,当您传递的函数位于“nice\\u plugin”函数的范围内时,如何访问它?范围是如何通过的?
function nice_plugin() {
function add_scripts() {}
add_action(\'wp_enqueue_scripts\', \'add_scripts\');
}
我测试了这个,当我看到它工作时,我很惊讶。