当然,这种方法有一些好处,但也有一些问题。
如果插件的目标是WordPress开发人员,他们会非常熟悉插件API,但最终用户并不熟悉。
对于非开发人员,类似于:
$data = give_me_the_data();
它比以下内容更容易理解、记忆和键入:
$data = apply_filters( \'give_me_the_data\' );
如果你看看这个网站上的一些问题,你就会明白新手和非开发人员对WordPress中的操作和过滤器有多困惑。
“拼写错误”问题作为一个经常拼写错误的人,我知道他们令人沮丧。如果您编写了一个有拼写错误的函数,它会抛出一个错误,用户会立即意识到这个问题。操作名称中的输入错误会导致API失败,但很难识别。
例如:
$data = apply_filters(\'mp:get-user-data\'); // works
$data = apply_filters(\'mo:get-user-data\'); // does not work, hard to find why
$data = mp_get_user_data(); // works
$data = mo_get_user_data(); // does not work and throws an error, immediately found
全局hell操作和过滤器只是全局变量。如果你用它们来构建你的API,你的代码可能会被系统中的任何一行代码所破坏。
这意味着,任何一个知道哪个插件的人身上的bug都会让你的插件无缘无故地失败。原因是你的插件不会失败。
示例:
do_action( \'mp:send-notification\', $user_id, $message );
// somewhere else
add_action( \'all\', \'do_something_bad_that_makes_your_plugin_fail\');
此外,任何人都可以使用这些钩子,即使它可以为您的API带来很多灵活性,也会带来很多复杂性。
例如,如果您使用对象作为参数,作为通过引用传递的对象,则它们可能在回调运行之前被修改。
结论这些都是我现在想到的原因,但如果这种方法没有得到广泛应用,可能还有其他原因。
对我来说,我不会使用这种方法,尤其是最后一点,但我不能说这在WordPress上下文中是绝对错误的。
因此,我不想强烈劝阻您使用它,只是建议您提前考虑所有问题,因为一旦您公开发布API,就很难切换。