如果未设置变量,PHP中是否有设置默认值的函数? 一些内置函数来替换类似的东西:
$myFruit = isset($_REQUEST['myfruit']) ? $_REQUEST['myfruit'] : "apple" ;
答案 0 :(得分:8)
PHP类有一个运算符(我认为5.3),它会将你的例子压缩为:
$myFruit = $_REQUEST['myfruit'] ?: "apple";
然而,我说“有点”,因为它只测试第一个操作数是否为false,如果没有设置则不会抑制通知。因此,如果(如您的示例中)可能未设置,则原始代码最佳。
类似于dictionary.get的功能很简单:
function dget($dict, $key, $default) {
return isset($dict[$key]) ? $dict[$key] : $default;
}
为清楚起见,我仍然使用您的原始代码。
编辑:http://wiki.php.net/rfc/ifsetor的ifsetor()的userland实现#2比上面的函数更整洁,并且也适用于非数组,但是同样需要注意,默认表达式总是会被评估如果没有使用:
function ifsetor(&$variable, $default = null) {
if (isset($variable)) {
$tmp = $variable;
} else {
$tmp = $default;
}
return $tmp;
}
答案 1 :(得分:1)
据我所知,在PHP中没有这样的东西。
你可以像
一样自己实现这样的东西$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();
答案 2 :(得分:1)
您还可以创建一个实现ArrayAccess的类,您在构造期间传递2个数组($_REQUEST
和一个默认数组)并使其透明地选择默认值。
$_REQUEST
并不是一个明智的想法。有关详细信息,请参阅$_REQUEST
上的手册。
答案 3 :(得分:0)
除了测试之外,如果某个键不存在然后返回默认值,您还可以在访问之前使用此值填充数组。
$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
}
但我也建议您继续使用三元运算符?:
。
答案 4 :(得分:-1)
在CakePHP框架中有一个名为ife()
的函数,你可以在http://api13.cakephp.org/view_source/basics.php/找到它,它是最后一个函数!
你可以像这样使用它:
echo ife($variable, $variable, 'default');