函数之前或之后的add_action(),add_filter()


18

浏览WordPress片段/教程/插件时,我经常看到add_action()add_filter()放置在函数声明之前:

add_action( 'publish_post', 'email_friends' );

function email_friends( $post_ID ) {
   $friends = 'bob@example.org, susie@example.org';
   mail( $friends, "sally's blog updated" , 'I just put something on my blog: http://blog.example.com' );
   return $post_ID;
}

从逻辑的角度来看,这对我来说毫无意义。为什么在代码中调用了函数之后又放置它呢?通常,这就是我处理相同情况的方式:

function email_friends( $post_ID )  {
   $friends = 'bob@example.org, susie@example.org';
   mail( $friends, "sally's blog updated" , 'I just put something on my blog: http://blog.example.com' );
   return $post_ID;
}

add_action( 'publish_post', 'email_friends' );

我知道这两种方案都可行,但是其中一种方案是否有特定优势?大约有90%的时间我看到使用第一个方案,因此使我相信这在某种程度上是有好处的。

Answers:


13

这是比较容易阅读:什么叫什么?如果要调试挂钩,则可以立即查看是否必须阅读该函数:如果不是挂钩,则可以跳过代码。

在主题和插件中,我将所有针对动作,过滤器和简码的注册合并在顶部并将该钩子添加到PHPDoc块中:

add_action( 'wp_head',  'foo' );
add_action( 'shutdown', 'bar' );

/**
 * Foo you!
 *
 * @wp-hook wp_head
 * @return  void
 */
function foo()
{
    print '<!-- foo -->';
}

2
尽管我不同意(只是因为我的个人喜好和过去的编码习惯),但对于为什么以这种方式完成此操作更容易理解。
voodooGQ 2012年

6

实际上并没有实际的区别,例如,我更喜欢遵循第一种情况,因为将调用放在一个位置并在该位置以下定义函数比较容易。PHP在运行任何内容之前都会分析整个文档,如果正确定义了功能,则所有内容都将正常运行,在两种情况下均无优势。

我相信正确的说法是:无论您的船浮在水面上:)


它之所以起作用,不是因为PHP会解析整个文档,而是因为call_user_func_array()(很可能)在运行时在函数定义之后调用do_action。因此,您可以在任何时候定义该钩子函数。
科夫申宁

1

4年后,但我敢肯定,它将帮助人们从搜索中获得帮助。

正如其他人所说,php解析整个文档并以正确的顺序执行没有什么区别。所以随便你

我个人喜欢第一种样式:

add_action(hook, bar);
function bar(){
    //code here
}

我倾向于倒想。如果您愿意的话,以目标为导向。所以我想读一读,“我们正在钩子上做功能栏。好酷,现在,函数有什么作用?”

它为功能更好地设置了上下文。当然,这只是我个人的喜好。随便吧。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.