1

記入しなければならない機能がありますが、それを行う唯一の方法は混乱です。私が持っている機能は次のとおりです。

public function($keys = array(), $pages = array()){}

基本的に目標は次のとおりです。

  • キーが配列で、各キーが設定されていない場合は、何かを行います。
  • キーが配列ではなく、設定されていない場合は、何かをしてください。

同じ概念がページにも当てはまります。

これが 4 つの if ステートメントです。次のようにします。

キーが配列でページがそうでない場合、ページが配列でキーがそうでない場合。両方が配列の場合....

私がこれまでに持っているものは次のとおりです。

public function sidebar($keys = array(), $pages = array()){
    $builder = AisisCore_Factory_Pattern::create('AisisCore_Template_Builder');

    if(is_array($keys)){
        foreach($keys as $key){
            if(!$builder->get_specific_option($key)){
                get_sidebar();
            }
        }
    }else{
        if(!$builder->get_specific_option($keys)){
            get_sidebar();
        }
    }

    if(is_array($pages)){
        foreach($pages as $page){
            if(!$page){
                get_sidebar();
            }
        }
    }else{
        if(!$pages){
            get_sidebar();
        }
    }

}

すぐにめちゃくちゃになることがわかります。get_specific_optionそのキーが存在するかどうかを確認します。配列は次のように行われます:array('key', 'secondKey')など。ページは次のように行われます: array(is_page(), is_category())- それぞれが true または false を返すため、ブール値のチェックが行われます。get_sidebar()たとえば、キーが設定されていない場合、またはページが true に等しくない場合、サイドバーが取得されます。

この関数を作成する方法が災害にならないようにする方法がわかりません。誰かが助けることができますか?

4

2 に答える 2

5

常に配列に変換することで、多くの複雑さを取り除くことができます(クイックワンライナー)

$keys = is_array($keys) ? $keys : ($keys ? array($keys) : array());
$pages = is_array($pages) ? $pages : ($pages ? array($pages) : array());

あなたの機能は今:

public function sidebar($keys = array(), $pages = array()){
    $builder = AisisCore_Factory_Pattern::create('AisisCore_Template_Builder');
    $keys = is_array($keys) ? $keys : ($keys ? array($keys) : array());
    $pages = is_array($pages) ? $pages : ($pages ? array($pages) : array());

    foreach ($keys as $key) {
        if (!$builder->get_specific_option($key)) {
            get_sidebar();
        }
    }

    foreach ($pages as $page) {
        if (!$page) {
            get_sidebar();
        }
    }
}

これは、多くの潜在的なサイドバーのインクルージョンのようです. ただ言って。NULLただし、 2 つのパラメーターのいずれかを渡すことができ、foreachコンテンツはまったく実行されません。

于 2013-03-06T19:39:34.660 に答える
0

次のようにオプションがオプションの場合は、値を null として指定できます。

public function sidebar($keys = NULL, $pages = NULL){
  //Do something here
}

これでうまくいくかもしれません。

<?php
    $search_array = array(
              'first' => 1, 
              'second' => 4);
    if (array_key_exists('first', $search_array)) {
         echo "The 'first' element is in the array";
    }
?>
于 2013-03-06T19:43:28.070 に答える