在函数内部设置挂钩,以便在另一个函数中使用


Setup a hook inside functions to use within another function

我试图在函数中设置IF语句,以确定是否使用了外部函数。我想我的问题有一条路可以走。。如何在外部函数(app1、app2)中设置钩子来构建IF语句?把它们包在一个班级里?如果是,我该如何构建该语句?

至少从我的PHP知识水平来看,这个逻辑似乎没有什么意义。这样做的目的是,我有两个函数(app1和app2),每个函数为两个独立的管理面板创建一组不同的选项。每个面板中选项的构造函数和标记是相同的,这将在"包装器"函数中。但目前,必须使用两个独立的"包装器"函数来处理此问题。一个功能用于Panel1,另一个用于Panel2。

所以我的任务是组合两个包装器函数,因为有两个基本上做相同事情的独立函数是多余的。以下是代码的摘要部分。正如您所看到的,每个中唯一的区别是"$panel_type=…"位

function app1() {
    $app1_options = array();
    $app1_options[] = array(
        'type' => 'text',
        'name' => 'Text Field',
        'id' => 'text_field_one'
    );
    return $app1_options;
}
function app2() {
    $app2_options = array();
    $app2_options[] = array(
        'type' => 'text',
        'name' => 'Text Field',
        'id' => 'text_field'
    );
    return $app2_options;
}
function wrapper_panel1() {
    $panel_type = app1();
    foreach( $panel_type as $value ) {
        switch ( $value[ 'type' ] ) {
            case 'text':
                // input stuff
            break;
        }
    }
}
function wrapper_panel2() {
    $panel_type = app2();
    foreach( $panel_type as $value ) {
        switch ( $value[ 'type' ] ) {
            case 'text':
                // input stuff
            break;
        }
    }
}

因此,真的在寻找某种方式将这两个功能合并在一起,比如:

function wrapper() {
    if ( app1() ) {
        $panel_type = app1();
    }
    if ( app2() ) {
        $panel_type = app2();
    }
    foreach( $panel_type as $value ) {
        switch ( $value[ 'type' ] ) {
            case 'text':
                // input stuff
            break;
        }
    }
}

可以在上面设置一个类/对象吗?或者任何可以实现这一点的变革。

非常感谢在这方面能提供的任何帮助。谢谢

只需将应用程序id传递给包装函数:

function wrapper_panel ($appId) {
    $optsFunc = 'app'.$appId;
    $panel_type = $optsFunc();
    foreach( $panel_type as $value ) {
        switch ( $value[ 'type' ] ) {
            case 'text':
                // input stuff
            break;
        }
    }
}
// In app1:
wrapper_panel(1);
// In app2:
wrapper_panel(2);

或者更好的方法是,在调用包装器函数时将选项传递给它:

function wrapper_panel ($panel_type) {
    foreach( $panel_type as $value ) {
        switch ( $value[ 'type' ] ) {
            case 'text':
                // input stuff
            break;
        }
    }
}
// In app1
wrapper_panel(app1());
// In app2
wrapper_panel(app2());

编辑

考虑到Wordpress的限制,我认为最简单、最不可怕的事情就是从app1()app2()函数中调用wrapper_panel()

function app1() {
    $app1_options = array();
    $app1_options[] = array(
        'type' => 'text',
        'name' => 'Text Field',
        'id' => 'text_field_one'
    );
    wrapper_panel($app1_options);
}
function app2() {
    $app2_options = array();
    $app2_options[] = array(
        'type' => 'text',
        'name' => 'Text Field',
        'id' => 'text_field'
    );
    wrapper_panel($app2_options);
}
function wrapper_panel ($panel_type) {
    foreach( $panel_type as $value ) {
        switch ( $value[ 'type' ] ) {
            case 'text':
                // input stuff
            break;
        }
    }
}

并用Wordpress注册app1app2功能而不是wrapper_panel功能。