我想我知道關於PHP的一切,直到我碰到了這個返回true:PHP - isset非現有陣列關鍵
$foo = 'hello';
isset($foo['a']); // returns false - OK
isset($foo['a']['b']; // returns false - OK
isset($foo['a'][0]); // returns true! WTF?!
任何人可以解釋我的第4行的結果呢?使用php 5.5.36進行測試。
我想我知道關於PHP的一切,直到我碰到了這個返回true:PHP - isset非現有陣列關鍵
$foo = 'hello';
isset($foo['a']); // returns false - OK
isset($foo['a']['b']; // returns false - OK
isset($foo['a'][0]); // returns true! WTF?!
任何人可以解釋我的第4行的結果呢?使用php 5.5.36進行測試。
嗯,這個問題有點令人誤解,因爲isset
返回true
對於任何非null
變量。由於$foo
是一個字符串,而不是數組,$foo["a"]
給出了一個非法字符串偏移量警告。 PHP假設你打算把"a"
作爲一個整數偏移量,並且這樣做會隱式地執行,將$foo["a"]
轉換爲$foo[0]
,這會給出字符串"h"
(爲字符串的第一個偏移量)。由於返回值是另一個字符串,因此表達式變爲"h"[0]
,這又是"h"
。
換句話說,$foo["a"][0]
其中$foo = "hello"
是與$foo[0][0]
相同的東西,它給我們"h"
。
但據不存在的數組鍵,isset
肯定會返回false
因爲一個不存在的關鍵線索,以不存在的值,它隱含null
。
Legit。 https://3v4l.org/vehe6#v540 –
'var_dump($ foo ['a'] [0])' –
也在http://phpfiddle.org/上找到,代碼爲$ foo ='hello'; echo isset($ foo ['a'])? '是2':「」; //返回false - 確定 echo isset($ foo ['a'] ['b'])? '是3':「」; //返回false - 確定 echo isset($ foo ['a'] [0])? '是4':「」; ' –
但是foo是字符串而不是數組 –