Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.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
If语句中的php和、OR运算符_Php - Fatal编程技术网

If语句中的php和、OR运算符

If语句中的php和、OR运算符,php,Php,我是编程新手,所以请不要评判我。这个问题是我不知何故错过的简单概念知识。我的问题是,在使用和以及或运算符时,括号是否有区别?比如说, if ( x == 1 && ( y == 1 || y == 2 ) ){ // do something } 基本上,我想做的是,x必须始终取值1,y可以在1和2之间变化。上述代码对此有意义吗?它与: if ( x == 1 && y == 1 || y == 2 ){ // do something } 对, 在第

我是编程新手,所以请不要评判我。这个问题是我不知何故错过的简单概念知识。我的问题是,在使用
以及
运算符时,括号是否有区别?比如说,

if ( x == 1 && ( y == 1 || y == 2 ) ){
  // do something
}
基本上,我想做的是,
x
必须始终取值1,
y
可以在1和2之间变化。上述代码对此有意义吗?它与:

if ( x == 1 && y == 1 || y == 2 ){
  // do something
}
对, 在第一个代码中,‍‍ ‍‍‍‍‍<代码>x==1‍,并将结果与
y==1 | | y==2的结果进行检查。

在第二个测试中,首先将检查
x==1&&y==1
,然后将其结果与
|y==2
&
的值高于
|
,因此将首先对其进行评估。使用括号有助于确保执行顺序与预期相同

从PHP手册:

使用括号,即使不是严格必要的,也可以通过显式分组而不是依赖隐式运算符优先级和关联性来提高代码的可读性


是的,有。您真正要问的是
&&
|
的运算符优先级是什么


&&
的优先级高于
| |
,这意味着如果没有使用括号明确指定顺序,将首先对其求值(如第一个示例所示)

您可以将优先级视为PHP向表达式中添加括号的顺序(如果您尚未将括号放入其中)。在第二个示例中,优先级最高的运算符是
==
,因此这些运算符的所有实例都用括号分组:

(x == 1) && (y == 1) || (y == 2)
下一个最高值是
&&
,因此现在我们在这些值周围添加括号:

((x == 1) && (y == 1)) || (y == 2)
表达式现在是明确的,因此我们不需要再添加任何括号

希望从这个论点中可以清楚地看出,你文章中的第一个表达式与第二个表达式不一样。例如,如果
x==0
y==2
,则第一个表达式(正确)的计算结果为false,而第二个表达式的计算结果为true


请参阅以获取PHP中的运算符先例列表。

括号没有区别。如果您想了解更多信息,请查看布尔逻辑的wikipedia页面:

&&(逻辑AND)运算符指示两个操作数是否都为真。 | |(逻辑或)运算符指示至少一个操作数为真。那么…什么是操作数

当您使用一个简单的表达式,如x==1时,它被视为一个操作数

如果你使用括号,括号内的所有东西都会考虑一个操作数,不管里面有多复杂。因此,您可以将条件分组

因此
x==1&(y==1 | | y==2)
将计算第一个操作数
x==1
是否为真,第二个操作数,即整个
(y==1 | | y==2)
是否为真

为了知道括号内的内容是真是假,括号内的内容将作为独立表达式进行计算

所以,我们必须使用操作数。首先,它将检查x==1是否为真。如果为假,它将不会检查括号内的内容,这并不重要,因为第一个条件无论如何都没有满足。如果x==1,我们可以检查第二个操作数: 因此,它将检查括号内的表达式,即y==1 | | y==2,如果其中一些表达式为真,则
(y==1 | | y==2)
为真操作数,整个表达式将为
x==1&&true
,因此基本上它现在依赖于x,如果括号内没有一个表达式为真,则
(y==1 | y==2)
是一个假操作数,整个操作将是
x==1&&false
因此所有操作都是假的

如果你不使用括号,你可以得到同样的结果,但是你必须检查括号,这将很难在一开始就记住

我建议在学习编程语言之前,先阅读一些关于布尔和的教程。在那之后,一切都会变得更容易。

在第一个例子中 首先计算左侧。如果这是真的,它会看到右侧,即括号,因此它会转到括号并对其求值,然后对照左侧进行检查


第二个示例将无法按您希望的方式工作,因为如果x=1它仍然会到右边去寻找y==1,你可以得到true。

那么你的意思是在第二个
|y==2
没有用吗?不,在第二个中,
x==1&&y==1
的结果将被检查,结果将与第一个代码中的
|y==2
进行检查,我认为如果x=是的,我没有把我的观点说对,现在我更新了我的算术答案,
的行为类似于
*
类似于
+
。总是用括号将条件放在“块”中是一个好习惯,所以不要用
if(x==1&&(y==1 | | y==2))
如果((x==1)和((y==1)| |(y==2))
,当您开始使用支持宏的语言或使用预处理器+1来花时间创建一个描述良好的答案时,您会得到回报