简写条件是根据PHP中另一个变量的存在来定义变量

Ben*_*ley 18 php variables conditional shorthand

基本上,我希望能够将变量定义为一件事,除非该事物不存在.我发誓,在某个地方,我看到了一个看起来像这样的速记条件:

$var=$_GET["var"] || "default";
Run Code Online (Sandbox Code Playgroud)

但我找不到任何文件来做到这一点,老实说它可能是JS或ASP或我看到的东西.

我知道在上面的代码中应该发生的只是检查两个语句是否返回true.但我认为如果第一次失败,我看到有人做了一些基本上定义了默认值的东西.这是任何人都知道的事情,可以帮助我吗?我疯了吗?说起来似乎多余:

$var=($_GET["var"]) ? $_GET["var"] : "default";
Run Code Online (Sandbox Code Playgroud)

或特别多余的说:

if ($_GET["var"]) { $var=$_GET["var"]; } else { $var="default"; }
Run Code Online (Sandbox Code Playgroud)

思考?

Mat*_*hew 14

Matthew已经提到了在PHP 5.3中实现它的唯一方法.请注意,您也可以链接它们:

$a = false ?: false ?: 'A'; // 'A'
Run Code Online (Sandbox Code Playgroud)

这与以下内容不同:

$a = false || false || 'A'; // true
Run Code Online (Sandbox Code Playgroud)

原因是PHP就像这方面的大多数传统语言一样.逻辑OR总是返回truefalse.但是,在JavaScript中,使用最终表达式.(在一系列OR中,它将是第一个非假的.)

var a = false || 'A' || false; // 'A' 
var b = true && 'A' && 'B';    // 'B';
Run Code Online (Sandbox Code Playgroud)


Fan*_*nis 8

在这种情况下,您应检查$ _GET中是否存在变量,然后检查它是否对您的参数有效.例如:

$var = (isset($_GET["var"]) && $_GET['var'] !== '') ? $_GET["var"] : "default";
Run Code Online (Sandbox Code Playgroud)

但是,这很快就会变得难以理解.我会说通过首先将变量初始化为安全默认值然后用外部变量覆盖它来保持可读性,如果这是有效的:

$var = "default";
if (isset($_GET['var') && $_GET['var'] !== '') {
    $var = $_GET['var] ;
}
Run Code Online (Sandbox Code Playgroud)

至于你的第一个例子,$var=$_GET["var"] || "default";存在于Javascript中:var someVar = incomingVar || "default";