2015-12-02 105 views
0

使用CodeIgniter 3.0.3時,文檔指出會話數據可以通過幾種不同方式檢索,包括$_SESSION['item']$this->session->item。這是真的。無論我如何設置會話變量,我都能看到我可以用這兩種方式來回顯這個值。使用CodeIgniter 3.x中的空()和isset()檢查會話變量

現在,隨着該會話變量填充,我可以檢查這樣的空條件:if(empty($_SESSION['item'])),它的計算結果爲bool(false),正如我所期望的那樣。但是,如果我以這種方式檢查相同的會話變量:if(empty($this->session->item))它評估爲bool(true),這不是我所期望的(因爲我可以在下一行回顯它的值)。爲什麼這兩種不同的方式來檢查空閒狀態的評估方式是不同的?

回答

0

這是由於empty()的工作原理。比較這個報價:

空($ registry-> notEmpty)的結果有點不配置,因爲該值顯然設置爲非空。這是由於empty()函數在這些情況下使用__isset()魔術functin。儘管在上面的文檔中已經提到了這一點,但我認爲這更值得一提,因爲這種行爲並不簡單。 (?expexted)爲了達到理想的效果,你需要__isset()神奇的功能添加到您的類:

(從php.net採取:http://php.net/manual/en/function.empty.php,從用戶Janci評論)

+0

哇。這是奇怪的行爲。如果變量具有可以回顯給屏幕的值(尤其是標量值),那麼'empty()'函數將其視爲空是有點嚇人的。 – MonsoonJoe