問題描述
當透過 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。