1

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

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

本质上,目标是:

  • 如果键是一个数组并且每个键都没有设置,做一些事情。
  • 如果 Keys 不是数组且未设置,请执行一些操作。

同样的概念也适用于页面。

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

如果 key 是数组但 pages 不是,如果 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())- 每个都返回真或假,因此是布尔检查。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两个参数中的任何一个,它根本不会运行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 回答