我想从会话中获取一个值,但如果未定义则使用默认值。当然,我想绕过 PHP 通知。
您可以编写一个执行此操作的函数
function get(&$var, $default){
if(isset($var)) return $var;
return $default;
}
echo get($foo, "bar\n");
$foobar = "foobar";
echo get($foobar, "ERROR");
有没有办法做到这一点而不在每个文件中定义这个函数?
我想从会话中获取一个值,但如果未定义则使用默认值。当然,我想绕过 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 开始,您现在可以使用 null 合并运算符:
$var ?? $default
这和你的功能完全一样
使用这个简洁的替代方案:
isset($myVar) || $myvar=$default;
||
运算符是短路 的,如果第一个被评估为真,它将不会评估第二个运算符。
使用更少的代码来做你需要的事情。
您无需使用该_?_:_
格式再次指定变量。
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)
查看文档以获取更多示例
Null 合并运算符已添加到 PHP 7.0 版中,它的作用是替换
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
使用较短的版本:
$username = $_GET['user'] ?? 'nobody';
上面的行所做的是检查是否$_GET['user']
已设置,而不是 null,然后它将分配给$username
变量,如果$_GET['user']
未设置(因此为 null),它将默认为'nobody'
字符串所以$username
is nobody
。
您的代码应如下所示:
echo $foo ?? "bar\n";
$foobar = "foobar";
echo $foobar ?? "ERROR";