我有一个我必须填写的功能,而我能看到的唯一方法就是一团糟。我的功能是:
public function($keys = array(), $pages = array()){}
基本上目标是:
相同的概念适用于页面。
这是四个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。
我不确定如何创建此功能而不是灾难。有人可以帮忙吗?
答案 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";
}
?>