2016-07-07 57 views
2

由於一些奇怪的原因,我的PHP沒有看到第二個參數的值。PHP函數看不到第二個參數的值

我的代碼:

PHP函數:

public function getVacs($key, $id = null, $deleted = null, $deleted_key = null) { 

     if(!$id) { 
      $data = $this->_db->getAll('vacatures', $key); 
     } elseif(!empty($deleted)) { 
      $data = $this->_db->getAll('vacatures', $key, $id, $deleted, $deleted_key); 
     } else { 
      $data = $this->_db->getAll('vacatures', $key, $id); 
     } 

     if($data->count()) { 
      $this->_data = $data->results(); 
      $this->_count = $data->count(); 
      return true; 
     } 
    } 

調用函數:

} elseif(isset($_POST['all'])) { 

     $vacs = $v->getVacs('delete', '0'); 

     echo json_encode($v->data()); 
     exit(); 
    } 

的問題是,該功能不會看到的$id值。

它運行第一個if,它應該運行else

回答

2

在php中,字符串"0"的計算結果爲false

這意味着您的支票if(!$id)將評估爲true並且您的邏輯id將不會設置爲$data

如果字符串"0"是合法的選項,然後檢查null明確代替:

if(is_null($id)){ 

這將

+0

Jup,我用下面的工作,'if(!is_null($ id))'。謝謝! – Chris

+0

@Chris yes if(!is_null($ id))'當$ id =='0'就是你想要的時候'會評估爲'true'?當'$ id'的值是'null'之外的任何東西時,我以爲你不想進入第一個區塊? – Ray

+0

我移動了'else'作爲第一個'if'。所以現在它將首先檢查'$ id'是不是'null' – Chris

1

這是看到的$id價值,但你的if語句設置不對。 0將在這樣的支票上評估爲false。所以,你真的需要確保它不爲空:

if($id != null) { 

如果你想,如果沒有有效的身份證件,如果只運行第一個,那麼你需要檢查它是否是空的(即不爲空,0 ,虛假,或一個空字符串)

if(empty($id)) { 
+0

仍然運行第一個'if'。 – Chris

+0

我更新了我的答案,您可能正在尋找。 – aynber

+0

我試過'if(!empty($ id))'但它仍然不運行'else' – Chris

0

使用strict comparison operator可能是在這種情況下是一個好主意(我會說在大多數情況下):

0 == null; // evaluates to true 
0 === null; // evaluates to false 

下很有用strpos人所以(返回0意味着乾草堆字符串位置0處的搜索詞,返回假意味着搜索詞未找到)。