php数组过滤掉负数,php – 为什么在这个数组中减去NULL不是负数?

使用源,卢克

像往常一样,答案在于源头。 PHP在内部使用以下两个函数来执行增量和减量操作:

这些操作根据其类型修改op1参数(NULL是一个类型);里面的increment_function()可以看到下面的分支in the code:

case IS_NULL:

ZVAL_LONG(op1, 1);

break;

上面的代码将op1的类型更改为一个数字,并将其值设置为1。

相反,decrement_function()不提供这样的分支,因此将执行default action:

default:

return FAILURE;

运行此代码实际上不会产生任何可观察到的失败,因为返回值被吸收在Zend VM中,但该变量绝对不会更新。

这不是一个错误(tm)

你可能会惊讶地知道,这种行为,包括布尔值,实际上是documented:

Note: The increment/decrement operators do not affect boolean values. Decrementing NULL values has no effect too, but incrementing them results in 1.

关于布尔:

$a = true;

var_dump($a--); // true

$a = false;

var_dump($a++); // false

关于字符串:

$letter = 'A';

var_dump(++$letter); // B

var_dump(--$letter); // B

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值