Shorthand conditional to define a variable based on the existence of another variable in PHP

孤街醉人 提交于 2021-02-16 05:49:32

问题


Essentially, I'd love to be able to define a variable as one thing unless that thing doesn't exist. I swear that somewhere I saw a shorthand conditional that looked something like this:

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

But I can't find any documentation to do this right, and honestly it might have been JS or ASP or something where I saw it.

I understand that all that should be happening in the above code is just to check if either statement returns true. But I thought I saw someone do something that essentially defined a default if the first failed. Is this something anyone knows about and can help me? Am I crazy? It just seems redundant to say:

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

or especially redundant to say:

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

Thoughts?


回答1:


Matthew has already mentioned the only way to do it in PHP 5.3. Note that you can also chain them:

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

This is not the same as:

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

The reason why is that PHP is like most traditional languages in this aspect. The logical OR always returns true or false. However, in JavaScript, the final expression is used. (In a series of ORs, it will be the first non-false one.)

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



回答2:


In such cases you should be checking for existence of the variable in $_GET and then whether it's valid for your parameters. For example:

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

However, this can become pretty unreadable pretty quickly. I'd say keep it readable by first initializing your variable to a safe default, and then overwriting that with an external one, if that's valid:

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

As for your first example, $var=$_GET["var"] || "default"; exists in Javascript: var someVar = incomingVar || "default";




回答3:


I've always used empty.

$var = !empty($_GET['var'])?$_GET['var']:'default';


来源:https://stackoverflow.com/questions/3738451/shorthand-conditional-to-define-a-variable-based-on-the-existence-of-another-var

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!