function_exists가 왜 사용됩니까?


30

WordPress 테마의 많은 개발자가 functions.php 에서 이것을 사용한다는 것을 알았습니다.

if (function_exists('register_nav_menus')) {
    register_nav_menus (array('primary' => 'Header Navigation'));
}

나를 위해, 나는 항상 functions.php에서 사용하는 모든 함수에 대해 add_action을 사용 합니다.

따라서 위의 내용은 다음과 같습니다.

add_action('init', 'my_register_nav_menus');

function my_register_nav_menus() {
    register_nav_menus (array('primary' => 'Header Navigation'));
}

두 가지 질문이 있습니다.

  1. 첫 번째 방법에서 if 문을 사용하는 이유는 무엇입니까?

  2. 어느 것이 올바른 방법입니까?

답변:


35

IMHO가 필요하지 않은 이전 버전과의 호환성을 위해 호출하기 전에 내장 된 WordPress 함수가 존재하는지 확인하십시오.

따라서 if ( function_exists( 'register_nav_menus' ) )테마 작성자가 3.0 이전 버전을 지원하는 것을 볼 수 있습니다 .

if ( function_exists( 'dynamic_sidebar' ) )왜 아직도 왜 보입니까? dynamic_sidebar가 2.2에서 도입 되었기 때문에 말할 수 없었습니다.

그것을 사용하는 또 다른 이유는 테마 또는 플러그인을 플러그 가능하게 만들기 때문입니다. 플러그 가능 기능은 하위 테마 또는 다른 플러그인에서 재정의 할 수있는 기능입니다.

이것은 호출이 아닌 정의에서 수행되며! 연산자를 정의하기 전에 존재하지 않는지 확인하십시오.

if ( ! function_exists( 'my_awesome_function' ) ) {
/**
 * My Awesome function is awesome
 *
 * @param array $args
 * @return array
 */
function my_awesome_function( $args ) {
  //function stuff
  return array();
  }
}

이것이 완료되면 하위 테마 또는 다른 플러그인이 해당 기능을 자체 기능으로 대체 할 수 있습니다.


9

function_exists함수는 add_action코드를 확인하는 것과 같은 기능을로드하는 다른 방법이 아니며 같은 이름의 다른 함수가 없으므로 코드를 손상시키지 않습니다. php.net에서 :

내장 함수 (내장) 및 사용자 정의 함수 _ 함수의 정의 된 함수 목록을 점검합니다.

당신이 당신의 코드에서 두 번 같은 기능이있는 경우 접두사 왜 그게 전부, 휴식 것입니다 귀하의 wp_보다는 뭔가 다른 기능을.

더 읽기 : http://php.net/manual/en/function.function-exists.php


0

http://php.net/function_exists 를 사용할 수 있습니다

if(function_exists('my_function')){
   // my_function is defined
}

또는 사용 가능한 모든 기능을 보려면 모두 인쇄하십시오.

echo "<pre>"; print_r(get_defined_functions());

페이지에 인쇄하면 해당 기능이 목록에 없으면 해당 기능을 사용할 수 없다는 의미입니다.

특정 라이브러리에 대한 확장을 활성화해야 할 수도 있습니다.


0

php.net은 이것을 다음과 같이 정의합니다

(PHP 4, PHP 5, PHP 7) function_exists — 주어진 함수가 정의되어 있으면 참을 반환

형 캐스팅 검사와 비슷한 것을 검사 할 수 있다는 점에서 Michelle의 사용법에 동의해야합니다. 따라서 함수가 존재하는지 (해당 페이지 또는 해당 페이지 / 파일 참조에서 호출 된 것) 있는지 확인하면 다른 함수를 실행하거나 템플릿 HTML을 구문 분석하는 것이 안전한지 알 수 있습니다.

누군가 언급했듯이 일반적으로 파일 / 테마 (WordPress 사용)가 필요한 요청을 실행할 수 있는지 확인하는 데 사용됩니다. 테마에 특정 템플릿 부분이 있는지 확인하는 데 사용했습니다.

if ( function_exists( 'register_sidebar' ) ) { get_sidebar(); }


0

function_exists 이전이 아닌 테마에서 함수 이름 뒤에 사용해야합니다.

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}

이것은 함수 및 / 또는 마크 업을 출력하기 전에 플러그인이 활성화되어 있는지 확인합니다. 그렇지 않으면 정의되지 않은 함수 호출과 같은 오류가 발생할 수 있습니다.

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