2016-07-07 49 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处的搜索词,返回假意味着搜索词未找到)。

相关问题