問題描述

當透過 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%的時間我看到第一種情況被使用,所以這讓我相信在某種程度上有益處。

最佳解決方案

它更容易閱讀:什麼時候叫什麼?如果你正在除錯一個鉤子,你可以立即看到你是否必須閱讀該功能:如果不是你的鉤子,你可以跳過程式碼。

在我的主題和外掛中,我結合了頂部的操作,過濾器和縮寫程式碼的所有註冊,並將鉤子新增到 PHPDoc 塊中:

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

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

次佳解決方案

實際上沒有什麼真正的區別,我比較喜歡跟隨第一種情況,因為在一個地方打電話,並定義下面的功能。 PHP 在執行任何東西之前解析整個檔案,如果函式被正確定義,一切都將正常工作,在任何一種情況下都沒有任何優勢。

我相信這裡說的正確的一點是:你的船漂浮什麼東西:)

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。