我想从会话中获取一个值,但是如果未定义,请使用默认值。当然,我也想绕过PHP通知。
以下功能可以做到这一点:
function get(&$var, $default){
if(isset($var)) return $var;
return $default;
}
是否有一种方法可以在每个文件中都没有定义此功能?
您可以在一个脚本中定义它,然后在其他脚本中require_once
定义该脚本
您也可以只使用三元运算符:
$myVar = isset($var)?$var:$default;
使用此简洁的替代方法:
isset($myVar) || $myvar=$default;
||
运算符是短路的,如果第一个运算符的值为真,它将不评估第二个运算符。
例如,在这种情况下,您可以使用我的微型库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以获取更多示例
从PHP 7开始,您现在可以使用null合并运算符:
$var ?? $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!%