source

WordPress 후크의 익명 함수

factcode 2023. 2. 9. 22:48
반응형

WordPress 후크의 익명 함수

WordPress 후크는 다음 두 가지 방법으로 사용할 수 있습니다.

  1. 콜백 함수 이름 및 해당 함수 사용

    add_action( 'action_name', 'callback_function_name' );
    function callback_function_name() {
        // do something
    }
    
  2. 익명 기능 사용(닫기)

    add_action( 'action_name', function() {
        // do something
    } );
    

WordPress 사용방법에 차이가 있습니까?선호하는 방법과 이유는 무엇입니까?

anonymous 함수의 단점은 remove_action을 사용하여 액션을 제거할 수 없다는 것입니다.

중요:후크를 제거하려면$function_to_remove그리고.$priority인수는 후크가 추가된 시간과 일치해야 합니다.이는 필터와 액션 모두에 적용됩니다.제거 실패 시 경고가 표시되지 않습니다.

당신이 정의하지 않았기 때문에function_to_remove제거할 수 없습니다.

따라서 다른 사용자가 덮어쓸 수 있는 이 내부 플러그인이나 테마는 사용하지 마십시오.

closure를 사용하면 글로벌 네임스페이스를 깨끗하게 유지할 수 있습니다.콜백으로 전달하기 위해 먼저 글로벌 함수를 작성할 필요가 없기 때문입니다.

add_action('admin_init', function () {
    // some code...
});

개인적으로 다음과 같은 경우를 제외하고 폐쇄를 콜백으로 사용하는 것을 선호합니다.

  • 콜백을 삭제할 수 있습니다.
  • 콜백 기능을 여러 번 사용해야 합니다.
  • 이전 PHP 버전(5.3 미만)에 대한 지원이 필요합니다.

수업 중 휴업

폐쇄는 또한 수업 내에서 유익할 수 있다.

class SomeClass
{
    public function __construct()
    {
        add_action('wp_head', function () {
            $this->addSomeStyling();
        });
    }

    protected function addSomeStyling()
    {
        echo '<style> body { color: #999; } </style>';
    }
}

보통 콜백 방식은 공개해야 하지만 이 경우 비공개로 하거나 보호할 수도 있습니다.

이 솔루션은 PHP 5.4+에서만 작동합니다.PHP 5.3에서도 동작하도록 하려면 , 명시적으로 패스 할 필요가 있습니다.$this다음과 같은 폐쇄에 대한 객체 참조:

    public function __construct()
    {
        $self = $this;

        add_action('wp_head', function () use ($self) {
            $self->addSomeStyling();
        });
    }

좀 더 정확히 말하면, 현재 워드프레스 문서에서 추가하고자 합니다. 실제로 이것이 사용 사례에 따라 어떻게 달라지는지를 보여 주기 위해:

왜 여기서 명명된 함수를 [Ajax 액션 훅 콜백][...]로 사용하는 거죠?폐쇄는 최근에야 PHP에서 지원되기 때문에 [...] 일부 사용자가 이전 버전의 PHP를 아직 실행하고 있을 수 있기 때문에 호환성을 최대화하기 위해 항상 명명된 함수를 사용합니다.만약 당신이 최신 PHP 버전을 가지고 있고 당신만의 설치만을 위해 개발한다면, 원한다면 클로저를 사용하세요."

두 가지 모두 사용할 수 있습니다.하지만 익명의 기능을 사용하면 두 가지 큰 단점이 있습니다.

  1. 필요한 경우 후크를 제거할 수 없습니다.따라서 테마 또는 플러그인이 충돌하여 후크 사용을 삭제하려고 하면 다음과 같이 할 수 없습니다.remove_action() ★★★★★★★★★★★★★★★★★」remove_filter()에는 함수 이름이 파라미터로 필요한데 이 방법은 없습니다.
  2. 익명 함수는 일부 PHP 버전에서 지원되지 않습니다.따라서 이전 버전을 설치한 사용자가 플러그인/테마를 사용하려고 하면 오류가 발생합니다.

그래서 저는 명명된 함수를 사용하는 것을 선호합니다.

언급URL : https://stackoverflow.com/questions/31240432/anonymous-functions-in-wordpress-hooks

반응형