if语句和函数参数

时间:2013-03-06 19:34:41

标签: php wordpress function arguments

我有一个我必须填写的功能,而我能看到的唯一方法就是一团糟。我的功能是:

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

基本上目标是:

  • 如果密钥是一个数组且每个密钥都设置,请执行某些操作。
  • 如果Keys不是数组并且设置,请执行某些操作。

相同的概念适用于页面。

这是四个if语句,然后我们这样做:

如果key是数组但是页面不是,如果pages是数组但是key不是。如果两者都是数组....

到目前为止我所拥有的是:

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。

我不确定如何创建此功能而不是灾难。有人可以帮忙吗?

2 个答案:

答案 0 :(得分: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传递给两个参数中的任何一个,并且根本不会运行foreach内容。

答案 1 :(得分: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";
    }
?>