php xor 运算符的坑

php 中用“ ^” 来支持按位异或运算,同时也支持 xor 来做逻辑异或运算,http://php.net/manual/zh/language.operators.logical.php,但经过测试发现这个xor 运算符根本就不起作用

比如下面的代码

<?php
$b = false xor true;

var_dump($b);

输出的结果居然是 false

然后咱们把顺序调换下

<?php
$b = true xor false;

var_dump($b);


输出的结果居然变成 true 了,好像 xor 操作没有任何作用,运算符左边的数字是啥就返回啥样的结果,百思不得其解啊,没办法,跟源码吧

手动编译 php ,把vld扩展加载进来,然后我们运行上面的代码查看对应的opcode,结果真是出人意料啊

./php -dvld.active=1 test.php

php xor 运算符的坑_第1张图片


可以看到做完 BOOL_XOR 异或运算后把结果返回给了 ~1,但是马上就 FREE 了~1,并没有把结果赋值给~0,等于这个运算白做了,真是坑啊

你可能感兴趣的:(PHP,XOR,PHP源码)