php - 为什么 explode on null 返回 1 个元素?

标签 php

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/

相关文章:

php - 无法通过 PHP Artisan 命令连接到 Laravel Homestead MySQL 服务器,但可以通过 Web 浏览器/应用程序连接

php - 返回传递给函数的相同数组 (zval)

php - Mac OS X 10.5 Apache 和 Subversion 升级备选方案

php - 返回数组中的 MySQL 行

php - 在 Windows 10 上安装 Apache 2.4 和 PHP 7

php - MySQL WHERE IN (SELECT id from ...) 最快的方法?

php - 即时创建数据库备份

php - 使用 jquery mysql 点击填充多个字段

php - 你可以在 ORDER BY 中添加 if 语句吗?

php - 迁移主机后主页丢失主题