繁体   English   中英

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

[英]Setup a hook inside functions to use within another function

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

可以为此设置类/对象吗? 或可以实现此目标的任何类型的更改。

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

只需将应用程序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(而不是wrapper_panel函数)注册app1app2函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM