addgery (), 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% часу я бачу, як використовується перший сценарій, і це змушує мене повірити, що певна користь цьому.

Відповіді:


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

6

Насправді різниці немає, я, наприклад, вважаю за краще керуватися першим сценарієм, тому що це акуратніше здійснювати дзвінки в одному місці та визначати функції нижче цього. PHP аналізує весь документ перед тим, як що-небудь запустити, і якщо функції правильно визначені, все буде працювати нормально, без жодної переваги в будь-якому сценарії.

Я вважаю, що правильна приказка тут: Що б не плавав ваш човен :)


Він працює не тому, що PHP аналізує весь документ, а тому call_user_func_array(), що (швидше за все) викликається визначенням функції під час запуску do_action. Таким чином, ви можете визначити функцію, що підключилася, де завгодно до цього моменту.
ковшенін

1

Через 4 роки, але я впевнений, що це допоможе людям потрапити сюди від пошуку.

Як заявили інші, різниці немає, оскільки php аналізує весь документ і виконує у правильному порядку. Тож що завгодно.

Мені особисто подобається перший стиль:

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

Я схильний думати назад. Ціль орієнтована, якщо ви хочете. Тож мені подобається читати: "Ми робимо функціональну панель, у гачку. Гаразд, круто, тепер, що ця функція робить?"

Він краще встановлює контекст для функції. Звичайно, це лише мої особисті переваги. Тож робіть те, що вам подобається.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.