if语句和函数参数

The*_*ebs 1 php wordpress arguments function

我有一个我必须填写的功能,而我能看到的唯一方法就是乱七八糟.我的功能是:

public function($keys = array(), $pages = array()){}
Run Code Online (Sandbox Code Playgroud)

基本上目标是:

  • 如果键是一个数组并且设置每个键,请执行某些操作.
  • 如果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();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

你可以看到它很快变得一团糟.get_specific_option将检查该密钥是否存在.数组完成如下:array('key', 'secondKey')依此类推.页面是这样完成的:array(is_page(), is_category())- 每个页面返回true或false,因此布尔检查.get_sidebar()如果,例如,未设置键,或页面不等于true,则会获得侧栏.

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

Col*_*n M 5

您可以通过始终转换为阵列(快速单线程)来消除大量复杂性

$keys = is_array($keys) ? $keys : ($keys ? array($keys) : array());
$pages = is_array($pages) ? $pages : ($pages ? array($pages) : array());
Run Code Online (Sandbox Code Playgroud)

你的功能现在:

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎是很多潜在的侧边栏内容.只是说.但是,您可以传递NULL两个参数中的任何一个,并且根本不会运行foreach内容.

  • @TheWebs对,因为这里的每个人都知道你的编码标准吗?究竟.那么自己去弄清楚吧.将三元语句转换为标准if语句几乎不需要训练有素的猴子,并且仍然会降低示例引入的复杂性.仅供参考:'diff`告诉你改变了什么.在每一行. (2认同)