0

我正在尝试在函数中设置 IF 语句以确定是否正在使用外部函数。我想我的问题可能有一种方式......我如何在外部函数(app1,app2)中设置挂钩来构建 IF 语句?把他们包在一个班级里?如果是这样,我该如何构造语句?

至少从我的 PHP 知识水平来看,这个逻辑似乎没有任何意义。这样做的目的是,我有 2 个函数(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;
        }
    }
}

在这上面设置一个类/对象可以做些什么吗?或者任何可以实现这一目标的改变。

非常感谢可以提供的任何帮助。谢谢!

4

1 回答 1

1

只需将应用程序 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()andapp2()函数中调用:

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注册app1and函数,而不是函数。app2wrapper_panel

于 2012-07-27T15:25:08.903 回答