2016-04-15 42 views
4
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元素上爆炸?

+3

1)我沒有得到相同的結果:https://3v4l.org/k6aaS 2)RTM:http://php.net/manual/en/function.explode.php#refsect1-function .explode-returnvalues – Rizier123

+2

我的猜測是空的,可能會對空字符串進行類型轉義。 –

+0

explode只需要一個字符串作爲第二個參數,然後給它一些奇怪的參數。由於函數名稱的狀態 - 它會使用您提供的分隔符將__字符串「爆炸」到數組中。 – Kleskowy

回答

7

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

如果定界符包含的值不包含在字符串中......將返回一個包含字符串的數組。

+3

*「否則你會得到一個很好的致命」* - 這是我們正在討論的PHP,更多的時候它更像是手腕上的弱耳光。 ;) – deceze

+1

@deceze哈哈!喜歡它,我只是*有*使用描述! – bishop