18

本质上,我希望能够将变量定义为一件事,除非那件事不存在。我发誓在某处我看到了一个类似这样的速记条件:

$var=$_GET["var"] || "default";

但是我找不到任何文档来正确执行此操作,老实说,它可能是 JS 或 ASP 或我看到的其他东西。

我知道上面代码中应该发生的一切只是检查任一语句是否返回 true。但我想我看到有人做了一些基本上定义了默认值的事情,如果第一次失败。这是任何人都知道并可以帮助我的事情吗?我疯了吗?说:

$var=($_GET["var"]) ? $_GET["var"] : "default";

或者说特别多余:

if ($_GET["var"]) { $var=$_GET["var"]; } else { $var="default"; }

想法?

4

3 回答 3

16

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

$a = false ?: false ?: 'A'; // 'A'

这与以下内容不同:

$a = false || false || 'A'; // true

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

var a = false || 'A' || false; // 'A' 
var b = true && 'A' && 'B';    // 'B';
于 2010-09-17T19:58:46.083 回答
8

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

$var = (isset($_GET["var"]) && $_GET['var'] !== '') ? $_GET["var"] : "default";

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

$var = "default";
if (isset($_GET['var') && $_GET['var'] !== '') {
    $var = $_GET['var] ;
}

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

于 2010-09-17T19:57:35.833 回答
3

我一直用空的。

$var = !empty($_GET['var'])?$_GET['var']:'default';
于 2014-06-02T15:20:38.590 回答