0

関数内でIFステートメントを設定して、外部関数が使用されているかどうかを判断しようとしています。私の質問が行くことができる1つの方法を推測します..IFステートメントを構築するために外部関数(app1、app2)にフックを設定するにはどうすればよいですか?クラスでそれらを包みますか?もしそうなら、どのように私はステートメントを構築できますか?

少なくとも私のレベルのPHP知識からは、ロジックは実際には意味をなさないようです。この目的のために、2つの関数(app1とapp2)があり、それぞれが2つの別々の管理パネルに対して異なるオプションのセットを作成します。各パネルのオプションのコンストラクターとマークアップは同じであり、「ラッパー」関数に含まれます。しかし現在、これを処理するには2つの別個の「ラッパー」関数を使用する必要があります。Panel1用とPanel2用の1つの関数。

したがって、基本的に同じことを行う2つの別個の関数を持つことは一種の冗長であるため、2つのラッパー関数を組み合わせるという任務を負っています。これがコードの要約ビットです。ご覧のとおり、それぞれの違いは「$ 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;
        }
    }
}

したがって、これら2つの関数をマージするための何らかの方法を本当に探しています。

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によって課せられた制約を考えると、最も簡単で恐ろしいことは、 and関数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に関数app1と関数を登録します。app2wrapper_panel

于 2012-07-27T15:25:08.903 に答える