在函数内部设置钩子以在另一个函数中使用

时间:2012-07-27 15:20:34

标签: php if-statement

我正在尝试在函数中设置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;
        }
    }
}

可以在此设置类/对象吗?或任何可以实现此目的的变化。

真的很感激可以提供任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

只需将app 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施加的限制,我认为最简单,最不可怕的事情是从wrapper_panel()app1()函数中调用app2()

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函数。