programing

WordPress에서의 콜백 함수로서의 클래스 전달방법

magicmemo 2023. 9. 13. 22:30
반응형

WordPress에서의 콜백 함수로서의 클래스 전달방법

클래스 방식을 콜백 함수 파라미터로 전달하는 방법을 찾고 있습니다.

주로 사용합니다.create_function()아래와 같이 하지만 속도가 느리고 디버그가 어렵다고 들었습니다.

add_action('init', create_function('', '$o = new AdminPageClass;'));
class AdminPageClass {

    function __construct() {
        add_action('admin_menu', array(&$this, 'admin_menu'));  
    }
    function admin_menu() {
        add_options_page(
            'Sample Admin Page Class', 
            'Sample Admin Page Class', 
            'manage_options',
            'sample_admin-page_class', 
            array(&$this, 'admin_page'));
    }
    function admin_page() {
        ?>
        <div class="wrap">
            <h1>Hi there</h1>
            <p>Hello World!</p>
        </div>
        <?php
    }
}

물론 이와 같은 추가 기능으로 가능합니다만, 가능하다면 빼고 싶습니다.

add_action('init', 'load_admin_page_class');
function load_admin_page_class() {
    $o = new AdminPageClass;
}

또한 클래스 개체를 인스턴스화하기 전에 생성하면 가능하지만 추가 줄도 생성됩니다.

$o = new AdminPageClass;
add_action('admin_menu', array(&$o, 'admin_menu'));

class AdminPageClass {

    function admin_menu() {
        add_options_page(
            'Sample Admin Page Class', 
            'Sample Admin Page Class', 
            'manage_options',
            'sample_admin-page_class', 
            array(&$this, 'admin_page'));
    }
    function admin_page() {
        ?>
        <div class="wrap">
            <h1>Hi there</h1>
            <p>Hello World!</p>
        </div>
        <?php
    }
}

저는 항상 클래스를 별도의 파일로 정의하기 때문에 메인 플러그인 파일에서 줄을 줄이는 첫 번째 방법을 선호합니다.그러나 언급한 바와 같이, 사용.create_function()피해야 합니다.

알려주셔서 감사합니다.

저는 정적인 방법을 만들 필요가 전혀 없다는 것을 알았습니다.

add_action('admin_menu', array(new AdminPageClass, "admin_menu"));

class AdminPageClass {

    function admin_menu() {
        add_options_page(
            'Sample Admin Page Class', 
            'Sample Admin Page Class', 
            'manage_options',
            'sample_admin_page_class', 
            array(&$this, 'admin_page'));
    }
    function admin_page() {
    ?>
        <div class="wrap">
            <h1>Hi there</h1>
            <p>Hello World!</p>
        </div>
    <?php
    }       
}

클래스 인스턴스와 메서드 이름이 포함된 배열을 반환하는 정적 메서드를 만듭니다.

/* 
    Plugin Name: static method callback demo
*/

add_action('admin_menu', AdminPageClass::_admin_menu());

class AdminPageClass {

    static function _admin_menu() {
        $class_name = get_class();
        $classinstance = new $class_name();
        return array(&$classinstance, "admin_menu");
    }
    function admin_menu($instantiate=false) {
        add_options_page(
            'Sample Admin Page Class', 
            'Sample Admin Page Class', 
            'manage_options',
            'sample_admin-page_class', 
            array(&$this, 'admin_page'));
    }
    function admin_page() {
        ?>
        <div class="wrap">
            <h1>Hi there</h1>
            <p>Hello World!</p>
        </div>
        <?php
    }
}

언급URL : https://stackoverflow.com/questions/12794152/passing-class-method-as-a-call-back-function-in-wordpress

반응형