为什么在null返回1元素时爆炸?

azn*_*t81 8 php

var_dump(count(explode(',',[]))); // 0
var_dump(count(explode(',',''))); // 1
var_dump(count(explode(',',null))); // 1 ????
Run Code Online (Sandbox Code Playgroud)

我期待最后一个0.有人能告诉我爆炸的原因null是1还是0?(PHP 5.6.16)

bis*_*hop 14

explode根据规范将字符串作为其第二个参数.你给它一个null,所以在explode运行逻辑之前,PHP将其null转换为字符串.每个函数都以这种方式运行:如果参数与正式规范不匹配,PHP会尝试"键入juggle"直到它们为止.如果PHP可以玩杂耍,发动机就会快乐地运转,否则你会在手腕上轻轻拍打:

PHP警告:explode()期望参数2是字符串,第1行的file.php中给出的对象

PHP将null变为string的方式很简单:null := ''.因此,与呼叫null和与呼叫''在语义上是等效的,因为类型杂耍的,因为看到这里:

$a = explode(',', '');
$b = explode(',', null);
var_dump($a === $b); // true

$a = count(explode(',', ''));
$b = count(explode(',', null));
var_dump($a === $b); // true
Run Code Online (Sandbox Code Playgroud)

所以现在你可能会问:为什么PHP在空字符串上爆炸时会返回一个单元素数组?这也是通过规范:

如果分隔符包含未包含在字符串中的值...将返回包含字符串的数组.

  • *"否则你会得到一个很好的致命"* - 这是我们正在谈论的PHP,更多的是它更像是手腕上的弱拍.;) (3认同)

Pet*_*ter 5

作为解决方法,使用

array_filter(explode(',', $myvar));
Run Code Online (Sandbox Code Playgroud)

然后你会得到一个空数组并count()返回 0。请注意,当$myvar == ''