Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在WordPress中将类方法作为回调函数传递_Php_Class_Wordpress - Fatal编程技术网

Php 在WordPress中将类方法作为回调函数传递

Php 在WordPress中将类方法作为回调函数传递,php,class,wordpress,Php,Class,Wordpress,我正在寻找一种将类方法传递给回调函数参数的方法 我通常使用create_function(),如下所示,但我听说它很慢,并且很难调试 add_action('init', create_function('', '$o = new AdminPageClass;')); class AdminPageClass { function __construct() { add_action('admin_menu', array(&$this, 'admin_men

我正在寻找一种将类方法传递给回调函数参数的方法

我通常使用
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
    }
}
此外,在类对象之前实例化它使之成为可能,但它也会创建一个额外的行

$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
    }
}
$o=新的AdminPageClass;
添加操作(“管理菜单”,数组(&$o,“管理菜单”);
类AdminPageClass{
功能管理菜单(){
添加选项页面(
“示例管理页面类”,
“示例管理页面类”,
“管理选项”,
“示例\u管理页面\u类”,
数组(&$this,'admin_page');
}
函数管理页面(){
?>
你好
你好,世界


创建一个静态方法,该方法返回包含类实例和方法名称的数组

/* 
    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
    }
}
/*
插件名称:静态方法回调演示
*/
添加操作('admin_menu',AdminPageClass::_admin_menu());
类AdminPageClass{
静态功能_admin_menu(){
$class_name=get_class();
$classinstance=new$class_name();
返回数组(&$classinstance,“管理菜单”);
}
函数管理菜单($instantiate=false){
添加选项页面(
“示例管理页面类”,
“示例管理页面类”,
“管理选项”,
“示例\u管理页面\u类”,
数组(&$this,'admin_page');
}
函数管理页面(){
?>
你好
你好,世界


我发现根本不需要创建静态方法

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
    }       
}
add_action('admin_菜单',数组(新的AdminPageClass,“admin_菜单”);
类AdminPageClass{
功能管理菜单(){
添加选项页面(
“示例管理页面类”,
“示例管理页面类”,
“管理选项”,
“示例\管理\页面\类”,
数组(&$this,'admin_page');
}
函数管理页面(){
?>
你好
你好,世界


我发现了一个问题。当这个类被扩展时,它不是指扩展的类,而是指原来的类。我问了一个新问题:很好而且有用的答案。谢谢。它给了我很多帮助。
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
    }       
}