如果没有设置变量的默认值,PHP中是否有函数? 一些内置功能来取代类似:如果密钥不存在,则设置关联数组的默认值
$myFruit = isset($_REQUEST['myfruit']) ? $_REQUEST['myfruit'] : "apple" ;
如果没有设置变量的默认值,PHP中是否有函数? 一些内置功能来取代类似:如果密钥不存在,则设置关联数组的默认值
$myFruit = isset($_REQUEST['myfruit']) ? $_REQUEST['myfruit'] : "apple" ;
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()的用户态执行#2比上述功能有点整洁,并与非阵列过工作,但具有相同的警告,默认的表情总是会即使评估,如果不是使用:
function ifsetor(&$variable, $default = null) {
if (isset($variable)) {
$tmp = $variable;
} else {
$tmp = $default;
}
return $tmp;
}
据我所知,不存在任何像这样的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();
全局变量是代码异味。你应该避免它。无论如何,这似乎只适用于现有变量('myFunction($ x)'仍然会发出通知)或静态(硬编码)值。 – KingCrunch 2011-02-23 10:14:58
是的,这是正确的 – Thariama 2011-02-23 11:02:29
有一个在CakePHP的框架调用ife()
功能,你可以在这里找到http://api13.cakephp.org/view_source/basics.php/,它是最后一个功能!
您可以使用它像这样:
echo ife($variable, $variable, 'default');
使用'@'来抑制错误并不是一个好主意,只要你能避免它。然而:'isset($ variable)有什么区别? $变量:'默认'? – KingCrunch 2011-02-23 10:10:21
这是比原来的代码更长,并使用错误抑制(不好!) – 2011-02-23 10:11:38
@KingCrunch,我不认为有区别,在编码指南中不允许使用'?:''stlye“。但我更喜欢它,因为它更短,并且我的观点非常好读。 – powtac 2011-02-23 10:13:42
取而代之的测试,如果没有键存在,然后返回默认值,也可以填写您的阵列与此值,对其进行访问之前。
$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
}
但我也建议只留在三元运营商?:
。
您还可以创建一个实现ArrayAccess的类,该类在构造过程中传递2个数组($_REQUEST
和带有默认值的数组),并使其透明地选择默认值。
顺便说一句,依靠$_REQUEST
不是一个明智的想法。有关更多信息,请参阅$_REQUEST
手册。
我的问题一般是所有关联数组,例如使用$ _REQUEST。 – DhruvPathak 2011-02-23 10:23:32
是的,只是想确保'$ _REQUEST'的诅咒被提及,因为它发生在问题中。 – tobyS 2011-02-23 11:11:56
我也做了同样的功能,只是好奇,如果有一些容易和内置我失踪。 – DhruvPathak 2011-02-23 11:12:10