2016-07-07 4 views
2

私のPHPは第2パラメータの値を見ていません。PHP関数が第2パラメータの値を見ない

マイコード:

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

文字列"0"は、falseと評価されます。

これはあなたのチェックif(!$id)trueと評価されますし、あなたのロジックでid$dataに設定されていないことを意味します。

文字列"0"は、正当なオプションである場合は、代わりに明示的nullをチェック:

if(is_null($id)){ 

これは

+0

Jup、私は 'if(!is_null($ id))'を使いました。ありがとう! – Chris

+0

@Chris yes '$ id == '0'があなたの望むものなら'(if is_null($ id)) 'は' true'と評価されますか? '$ id'の値が' null'以外のものであれば、最初のブロックに行きたくないと思ったのですか? – Ray

+0

'else'を最初の' if'に移動しました。だから、 '$ id'が' null 'でないかどうか最初にチェックします。 – Chris

1

それは$idの値を見ているだろうが、あなたの文は間違って設定されている場合。 0はそのようなチェックでfalseと評価されます。だから、本当にそれがnullではないことを確認する必要があります。

if($id != null) { 

あなたが最初にしたい場合は有効なIDがない場合にのみ実行する場合は、その後、あなたはそれが空だかどうかを確認(すなわちヌルでない、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は、haystack文字列の位置0で検索された用語を意味し、falseは、検索された用語が見つからないことを意味する)。

関連する問題