함수 전후에 add_action (), add_filter ()


18

워드 프레스를 통해 볼 때 조각 / 튜토리얼 / 플러그인 나는 종종 볼 수 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합니다. 따라서 해당 지점까지 후크 기능을 정의 할 수 있습니다.
kovshenin

1

4 년 후 사람들이 검색을 통해 여기에 오는 데 도움이 될 것입니다.

다른 사람들이 말했듯이 php는 전체 문서를 구문 분석하고 올바른 순서로 실행함에 따라 차이가 없습니다. 그래서 당신이 원하는대로.

나는 개인적으로 첫 번째 스타일을 좋아합니다.

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

나는 거꾸로 생각하는 경향이 있습니다. 당신이 원한다면 목표 지향. 그래서 저는 "우리는 기능 바를 연결하고 있습니다. 좋아요, 이제 기능은 무엇을합니까?"

함수에 대한 컨텍스트를 더 잘 설정합니다. 물론 이것은 나의 개인적인 취향 일뿐입니다. 그래서 당신이 좋아하는 것을하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.