var_dump(count(explode(',',[]))); // 0
var_dump(count(explode(',',''))); // 1
var_dump(count(explode(',',null))); // 1 ????
我原以为最后一个是 0。有人能告诉我从 null
爆炸是 1 而不是 0 的原因吗? (PHP 5.6.16)
最佳答案
explode
接受一个字符串作为它的第二个参数,by specification .您给了它一个null
,所以在explode
逻辑运行之前,PHP 将null
转换为一个字符串。每个函数都以这种方式运行:如果参数与正式规范不匹配,PHP 会尝试“输入变戏法”,直到它们匹配为止。如果 PHP 可以玩杂耍,引擎就会愉快地运转,否则你会被轻拍一下:
PHP Warning: explode() expects parameter 2 to be string, object given in file.php on line 1
PHP 将 null 转换为字符串的方式很简单: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 :
If delimiter contains a value that is not contained in string ... an array containing string will be returned.
关于php - 为什么 explode on null 返回 1 个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36648491/