var_dump(count(explode(',',[]))); // 0
var_dump(count(explode(',',''))); // 1
var_dump(count(explode(',',null))); // 1 ????
我期待着0的最後一個。有人能告訴我爲什麼從null
爆炸的原因是1而不是0? (PHP 5.6.16)爲什麼在null返回1元素上爆炸?
var_dump(count(explode(',',[]))); // 0
var_dump(count(explode(',',''))); // 1
var_dump(count(explode(',',null))); // 1 ????
我期待着0的最後一個。有人能告訴我爲什麼從null
爆炸的原因是1而不是0? (PHP 5.6.16)爲什麼在null返回1元素上爆炸?
explode
以字符串作爲第二個參數by specification。你給它一個null
,所以在explode
的邏輯運行之前,PHP將null
轉換爲一個字符串。每個函數都以這種方式運行:如果參數與正式規範不匹配,則PHP嘗試「鍵入雜耍」,直到他們這樣做。如果PHP可以忙裏忙外,發動機馬達十分滿意,否則你在手腕上的弱巴掌:
PHP的警告:爆炸()預計參數2爲字符串,對象file.php給出1號線
PHP向字符串變零的方式很簡單:null := ''
。因此,與null
通話,並與''
呼是語義上等同,因爲類型雜耍的,所看到here:
$a = explode(',', '');
$b = explode(',', null);
var_dump($a === $b); // true
$a = count(explode(',', ''));
$b = count(explode(',', null));
var_dump($a === $b); // true
所以,現在你可能會問:爲什麼在一個空字符串爆炸時沒有PHP返回一個元素的數組?這也是by specification:
如果定界符包含的值不包含在字符串中......將返回一個包含字符串的數組。
1)我沒有得到相同的結果:https://3v4l.org/k6aaS 2)RTM:http://php.net/manual/en/function.explode.php#refsect1-function .explode-returnvalues – Rizier123
我的猜測是空的,可能會對空字符串進行類型轉義。 –
explode只需要一個字符串作爲第二個參數,然後給它一些奇怪的參數。由於函數名稱的狀態 - 它會使用您提供的分隔符將__字符串「爆炸」到數組中。 – Kleskowy