php中函數 isset(), empty(), is_null() 的區別,boolean類型和string類型的false判斷
實際需求:把sphinx返回的結果放到ssdb緩存里,要考慮到sphinx開始沒有數據,掛掉后恢復的情況。
開始實用empty函數發現sphinx掛掉后返回的內容為空,sphinx恢復后也一直進入不了,后面打印出為NUll值加上is_null判斷還是不行,如果sphinx為空,ssdb會返回一個false的字符串,不是boolean類型的,empty函數和is_null函數都返回true,所以還必須加上個!='false' 的判斷才行。
實戰代碼:
$ssdb = new SimpleSSDB(REDIS_HOST,REDIS_PORT); $key = SITE_DOMIAN.'articles'.$page_size.$page.md5($keyword); // print_r($key);
// var_dump($articles);
// var_dump(gettype($articles));
$articles = $ssdb->get($key); if(empty($articles) || is_null($articles) || $articles=='false'){ // print_r('into sphinx...'); $cl = new SphinxClient ();
下面是一個比較詳細的php類型對應的返回值
更多詳情的可參考:http://php.net/manual/en/types.comparisons.php
總結:當結果不符合預期的時候,需要多打印出相關參數來驗證代碼是否正確,需要打印類型和值出來進行測試,然后查對照表確定。