速记条件,用于根据 PHP 中是否存在另一个变量来定义变量

2022-08-30 22:12:21

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

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

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

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

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

或者特别多余的说:

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

思潮?


答案 1

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

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

这与以下情况不同:

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

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

var a = false || 'A' || false; // 'A' 
var b = true && 'A' && 'B';    // 'B';

答案 2

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

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

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

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

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


推荐