Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 还是令人惊讶的行为_Php - Fatal编程技术网

Php 还是令人惊讶的行为

Php 还是令人惊讶的行为,php,Php,我在php中使用或作为逻辑OR得到了一些令人惊讶的结果。 考虑到以下准则: $a = false; $b = false; $c = true; # Test 1, using OR and assigning to a variable $value = $a OR $b OR $c; var_dump( $value ); # return bool(false) but why? # Test 2, using OR directly in var_dump var_dump( $a

我在php中使用或作为逻辑OR得到了一些令人惊讶的结果。
考虑到以下准则:

$a = false;
$b = false;
$c = true;

# Test 1, using OR and assigning to a variable
$value = $a OR $b OR $c;
var_dump( $value );
# return bool(false) but why?

# Test 2, using OR directly in var_dump
var_dump( $a OR $b OR $c );
# return bool(true) as expected

# Test 3, using || and assigning to a variable
$value = $a || $b || $c;
var_dump( $value );
# return bool(true) as expected

# Test 4, using || directly in var_dump
var_dump( $a || $b || $c );
# return bool(true) as expected

为什么测试1和测试2即使执行相同的逻辑运算,也会给出不同的结果?

操作符和
操作符的行为不一样。它们不能互换使用

如果您想要
|
行为,请使用它。不要使用
,除非
|
会做错事

对于您的情况,这两行代码的行为完全相同:

$value = $a OR $b OR $c;
($value = $a) OR $b OR $c;
换句话说,您的代码基本上就是:

$value = $a;
如果您使用了
|
操作符,则这两个操作符是相同的,就像您有这样的大括号一样:

$value = $a || $b || $c;
$value = ($a || $b || $c);

有关更多详细信息:

如果将测试1括在括号中,它将按预期运行:

$value = ($a OR $b OR $c);
在测试2上运行var_dump时,会得到预期的结果,因为var_dump将操作包装在括号中

通常最好像这样用括号括起一个操作,尤其是变量赋值

此外,“OR”关键字和“| |”的行为方式也不同。请参阅此处的文档:

他们当然不会!总之,我讨厌生活在这样一个世界里,
|
是同一件事。答案需要链接:@sectus谢谢。完成。如果或的优先级低于=,则确实有意义。但是,使用优先级低于赋值运算符的逻辑运算符感觉有点不自然。谢谢你的详细回答!