2011-06-20 25 views
2

PHP手册并没有说有一个,但是......也许有一个隐藏的?xor符号表示形式?

简而言之,我喜欢使用if的符号操作表示法,这样我确信在搜索文档时,我总能找到我要找的东西。但与xor有可能我的代码包含这样的字符串/值或东西。像模板类中的方法 - e xor cize();.

+0

相关:[参考 - 这个符号在PHP中的含义是什么?](http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) – jensgram

回答

5

你可以使用!=,如果他们俩都已经布尔值。

if (true != false) // xor 
    ... 

当然,这与在搜索结果中得到误报了同样的问题,所以也许你可以通过个人的约定(在混乱的风险你的同事)使用其他PHP一事─的等于运营商:

if (true <> false) // xor 
    ... 

如果他们还不是布尔值,那么您需要将它们转换。

if (!$a <> !$b) // xor 
    ... 


编辑:一些实验用PHP的非常宽松的强制类型转换后,我给你自己创造的伪操作符, ==!操作! $a ==! $b相当于 $a xor $b

if ('hello' ==! 0) // equivalent to ('hello' xor 0) 
    ... 

这实际上'hello' == !0>'hello' == true>true == true>true是,这就是为什么它的工作原理为xor。这是有效的,因为当PHP比较一个布尔值与其他值时,它是converts the second argument to boolean too

+0

嗯,是的,但正如你所说,这提供了太多的搜索结果! '==!'会转化为什么? – jolt

+1

'==!'作为逻辑'xor'工作。 '$ a ==! $ b'实际上是'$ a ==!$ b',这与'!$ a!=!$ b'是一样的,因为当一边是布尔值时,PHP会将两边强制转换为布尔值。 –

3

bitwise operators。它是符号^

+0

啊,所以按位运算符==逻辑运算符?或者有什么区别? – jolt

+0

@Tom有一个区别,一个用布尔运算,另一个用整数运算。尽管如此,PHP的类型不严格的本质允许你使用'^'来达到与'xor'相同的目的。 – Artefacto

6

的异或运算符PHP是^

如果你想使用xor(在任何语言,真的,不只是PHP),但你担心搜索它找到像的东西,你可以只搜索" xor "(在任一侧的空间)。

或者任何正则表达式,防止周围的文字也变成了xor字的一部分,诸如(仅举例):

[^a-zA-Z0-9_]xor[^a-zA-Z0-9_] 
+0

确实如此,但'xor'比较之间没有空格,即:if(($ this && $ that)xor($ foo && $ bar))''。罕见的发生,但仍然会发生。 – jolt

0

如果您正在寻找逻辑xor,没有符号相当于。

3

如果你发现自己在一个情况下的XOR运算符不存在,那么你就可以模拟它与,或,而不是。

(A & &!B)|| (!A & & B)在逻辑上等同于xor。