2016-04-15 58 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