PHP变量“默认值”

时间:2012-06-22 17:45:13

标签: php variables default-value

我想从会话中获取值,但如果未定义,则使用默认值。当然,我想绕过PHP的通知。

以下功能执行此操作:

function get(&$var, $default){
    if(isset($var)) return $var;
    return $default;
}

Example in action

有没有办法在不在每个文件中定义此功能的情况下执行此操作?

6 个答案:

答案 0 :(得分:8)

您可以在一个脚本中定义它,然后在其他脚本中require_once该脚本

您也可以使用三元运算符:

$myVar = isset($var)?$var:$default;

答案 1 :(得分:2)

使用这个简洁的替代方案:

isset($myVar) || $myvar=$default;

||运算符是短路的,如果第一个运算符被评估为真,它将不会评估第二个运算符。

答案 2 :(得分:1)

从PHP 7开始,您现在可以使用null合并运算符:

$var ?? $default

与您的功能完全一样

答案 3 :(得分:0)

在这种情况下,您可以使用我的小型库ValueResolver,例如:

$myVar = ValueResolver::resolve($var, $default);

并且不要忘记使用命名空间use LapaLabs\ValueResolver\Resolver\ValueResolver;

还可以进行类型转换,例如,如果变量的值应该是integer,那么请使用:

$id = ValueResolver::toInteger('6 apples', 1); // returns 6
$id = ValueResolver::toInteger('There are no apples', 1); // returns 1 (used default value)

查看docs了解更多示例

答案 4 :(得分:0)

Null coalescing operator已添加到PHP 7.0版中,它的作用是替换

$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

具有较短的版本:

$username = $_GET['user'] ?? 'nobody';

上面的行所做的是检查是否设置了$_GET['user'],并且不为null,如果未设置$username,它将把它分配给$_GET['user']变量(因此null),则默认为'nobody'字符串,因此$usernamenobody

您的代码应如下所示:

echo $foo ?? "bar\n";
$foobar = "foobar";
echo $foobar ?? "ERROR";

答案 5 :(得分:-1)

使用更少的代码来完成您的需要。

您无需使用_?_:_格式再次指定变量。

echo $var?:"default";

相同
echo $var?$var:"default";

现在,就空检而言,您可以使用@静音通知,我不确定技术后果,但您在使用此格式时已经在进行自己的检查:

echo @$non_existing_var?:"default";

一些例子:

<?php

    $nope = null;
    $yup = "hello";
    echo ($nope?:$yup) . "\n" ;
    echo ($yup?:$nope)  . "\n" ;

    $items = [ 'one', 'two', false, 'three', 'four', null ];

    foreach($items as $item):
        echo($item?:"default shown (".var_export($item,true).")")."\n";
    endforeach;

    echo(@$non_existing?:"default for non-existant variable!");

?>

输出:

$ php variabledefault.php
 hello
 hello
 one
 two
 default shown (false)
 three
 four
 default shown (NULL)
 default for non-existant variable!%