[英]if statements and function arguments
我必須填寫一個函數,而我看到的唯一方法就是一團糟。 我具有的功能是:
public function($keys = array(), $pages = array()){}
本質上,目標是:
頁面也采用相同的概念。
所以這是四個if語句,那么我們這樣做:
如果key是array但頁面不是,如果pages是array但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,因此進行布爾檢查。 例如,如果未設置鍵或頁面不等於true,則get_sidebar()
將獲取側邊欄。
我不確定如何創建此功能而不會造成災難。 可以幫忙嗎?
您可以通過始終轉換為數組來消除很多復雜性(快速單線)
$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
內容。
如果選項是可選的,則可以將值提供為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";
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.