programing

PHP - 기존 함수 재정의

lastcode 2023. 4. 2. 10:36
반응형

PHP - 기존 함수 재정의

이름이 같지만 코드가 다른 기존 함수를 다시 클로즈할 수 있습니까?아니면 오래된 기능을 "비활성화"하는 건가요?

WordPress의 핵심 기능을 재정의하고 싶은데 플러그인과 테마가 많이 호출하기 때문에 동일한 기능명을 유지해야 합니다.

WordPress 후크(필터 및 액션이라고 함)를 사용하여add_filter()사용 중인 기능을 재정의합니다.

예.

function function_name() {
 //code goes here
}

$hook = 'get_options'; // the function name you're filtering
add_filter( $hook, 'function_name' );

Codex가 많은 도움을 줄 것이다.

http://codex.wordpress.org/Plugin_API/Filter_Reference

이를 위해 젠드 엔진을 확장하는 APD와 같은 것을 사용하는 경우에만 다음과 같이 하십시오.

도입부

메서드 문서 덮어쓰기

주의: Runkit은 APD보다 더 구체적인 용도이며 다른 주소에서 원래 방식을 그대로 유지할 수 있기 때문에 더 나은 옵션인 것 같습니다.

동일한 이름의 다른 함수가 아직 정의되지 않은 경우 조건 체크에서 원래 함수를 정의하는 블록을 래핑할 수 있습니다(코어 PHP가 아닌 워드프레스 함수를 의미한다고 가정합니다).

    <?php 
if(!function_exists('function_name')){ 
    //old definition here
    } ?>

그런 다음 롤백해야 할 경우 원본을 보존하면서 위의 문서를 다시 정의할 수 있습니다.

변경이 얼마나 복잡한지, 몇 번을 할 수 있는지에 따라서는, PHP 5 를 사용하고 있는 경우는, 네임스페이스를 조사할 수도 있습니다.

오래된 기능을 코멘트하고 새로운 기능을 쓰면 됩니다.

PHP에서는 함수를 기본적으로 재정의하거나 오버로드할 수 없습니다(즉, 이름은 같지만 매개 변수는 다른 함수를 정의함).runkit()runkit_function_redefine와 같이 함수를 재정의할 수 있는 확장 기능도 있지만, 이러한 확장 기능은 거의 설치되지 않고 대부분 신뢰할 수 없습니다.

제가 시도한 솔루션은 다음과 같습니다.

function suffusion_get_image($options = array()) {
    include_once ABSPATH.'wp-content/themes/suffusion-child/functions/media.php';
    return childtheme_overide_suffusion_get_image($options = array());
    ....
}

업그레이드 시 오버헤드가 있는 것은 분명합니다.스크립트에 행을 다시 추가해야 하기 때문입니다.이 메서드는 지금까지 정상적으로 사용되었지만, 현재는 로 실행하려고 합니다.get_termswp-claration 문제를 포함하여 현재 해결 또는 해결하려는 문제를 해결하려고 합니다.

코어를 편집하는 이유는 기존 코어가 멀티사이트 요건에 편리한 방법으로 제공되지 않기 때문입니다.

했는데, 이 포럼을 사용하세요.override_function처럼 쓰여져 있습니다.되어 있는 것을 하는 것으로서 .PHP가 내장된 기능을 의미하는 것으로 받아들였습니다.

언급URL : https://stackoverflow.com/questions/4725194/php-override-existing-function

반응형