为什么'define()|| 定义常量时的define()'语法

Dav*_*las 5 php

为什么在定义常量之前检查常量是否存在的方法:

defined('CONSTANT') || define('CONSTANT', somedefinition);
Run Code Online (Sandbox Code Playgroud)

用来代替:

if !(defined('CONSTANT')) {
    define('CONSTANT', somedefinition);
}
Run Code Online (Sandbox Code Playgroud)

使用'或'代替'||'有什么区别吗 在第一种方法中,我已经在书中看到过.

Ric*_*urs 10

由于|| 正在(在C,Java,C#,php中)被"短路"(如果第一个操作数为真,则不评估第二个,因为表达式已被评估为真,无论第二个是什么.

所以这是经典的C风格"简洁".使用尽可能少的代码行,即使它与更长的代码完全相同.

所以它读取:如果定义(...),不要执行define()位...如果没有定义(),请尝试评估define()位,并在此过程中,它将定义常量.


Mch*_*chl 5

其他人已经回答了您问题的第一部分,因此我将采用后者:

orvs ||而言,在此特定情况下没有区别。然而,or具有较低的运算符优先级=(赋值运算符),而||具有较高。如果您要使用短路进行分配,那么这很重要。

考虑:

$a = 2 or $b = 2;
var_dump($a);  // int(2)


$a = 3 || $b = 3;
var_dump($a);  // bool(true)
Run Code Online (Sandbox Code Playgroud)

在第二个示例中,||在之前得到了评估=。使用括号看起来像这样

$a = (3 || $b = 3);
Run Code Online (Sandbox Code Playgroud)

而第一个

($a = 2) or ($b = 2);
Run Code Online (Sandbox Code Playgroud)