如果PHP中的变量未设置,是否有一种函数可以设置其默认值? 有一些内置函数可用于替换以下内容:
$myFruit = isset($_REQUEST['myfruit']) ? $_REQUEST['myfruit'] : "apple" ;
如果PHP中的变量未设置,是否有一种函数可以设置其默认值? 有一些内置函数可用于替换以下内容:
$myFruit = isset($_REQUEST['myfruit']) ? $_REQUEST['myfruit'] : "apple" ;
PHP 有一个操作符可以实现这个功能(从5.3版本开始),将您的示例压缩为:
$myFruit = $_REQUEST['myfruit'] ?: "apple";
然而,我说“有点儿”是因为它仅测试第一个操作数是否为假,并且如果未设置,则不会抑制通知。因此,如果(如在您的示例中)可能未设置,则您的原始代码最好。
类似于字典.get的函数非常简单:
function dget($dict, $key, $default) {
return isset($dict[$key]) ? $dict[$key] : $default;
}
为了清晰起见,我仍然会使用您的原始代码。
编辑:ifsetor()的用户级实现#2,位于http://wiki.php.net/rfc/ifsetor上,比上述函数更整洁,并且也适用于非数组,但具有相同的注意点,即默认表达式始终会被评估,即使不使用它:
function ifsetor(&$variable, $default = null) {
if (isset($variable)) {
$tmp = $variable;
} else {
$tmp = $default;
}
return $tmp;
}
$myVar = "Using a variable as a default value!";
function myFunction($myArgument=null) {
if($myArgument===null)
$myArgument = $GLOBALS["myVar"];
echo $myArgument;
}
// Outputs "Hello World!":
myFunction("Hello World!");
// Outputs "Using a variable as a default value!":
myFunction();
// Outputs the same again:
myFunction(null);
// Outputs "Changing the variable affects the function!":
$myVar = "Changing the variable affects the function!";
myFunction();
myFunction($x)
仍然会抛出一个提示),或者静态(硬编码)值。 - KingCrunch$_REQUEST
和一个带有默认值的数组),并使其透明地选择默认值。$_REQUEST
并不是一个明智的做法。有关更多信息,请参阅$_REQUEST
手册。$_REQUEST
的问题,因为它出现在问题中。 - tobyS如果一个键不存在,而你需要返回一个默认值,你可以在访问之前将数组填充为这些值,而不是进行测试。
$expectedKeys = array('myfruit');
$requestData = array_merge (
array_combine(
$expectedKeys,
array_fill(0, count($expectedKeys), null)),
$_REQUEST);
$postData
现在是一个包含所有你期望的键(由$expectedKeys
指定)的数组,但任何在$_REQUEST
中缺失的条目将会是null
。
$myFruit = $requestData['myfruit'];
if (is_null($myFruit)) {
// Value not exists
}
但我也建议只使用三元操作符?:
。
ife()
的函数,您可以在此处找到它http://api13.cakephp.org/view_source/basics.php/,它是最后一个函数!echo ife($variable, $variable, 'default');
@
来抑制错误从来不是一个好主意。然而:与isset($variable) ? $variable : 'default'
有什么区别? - KingCrunch?:
“风格”。但我更喜欢它,因为它更短,而且在我看来易读。 - powtac@
运算符)它将在应该帮助开发人员的情况下抛出通知。 - KingCrunch