PHP 变量“默认值”


PHP variable "default value"

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

你可以编写一个函数来做到这一点

function get(&$var, $default){
    if(isset($var)) return $var;
    return $default;
}
echo get($foo, "bar'n");
$foobar = "foobar";
echo get($foobar, "ERROR");

实际示例

有没有办法不在每个文件中定义此功能来做到这一点?

您可以在

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

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

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

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

$var ?? $default

与您的函数完全一样

使用以下简洁的替代方法:

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

||运算符短路,如果第一个操作符被评估为真,则不会评估第二个操作器。

Null 合并运算符已添加到 PHP 7.0 版本中,它的作用是替换

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

使用较短的版本:

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

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

您的代码应如下所示:

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

使用更少的代码来执行您需要的操作。

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

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!%                                                                                                                   

在这种情况下,您可以使用我的小库 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)

查看文档以获取更多示例