有没有更好的(即更易读)的方式来写这个?
if (isset($input_vars['directive']) && $input_vars['directive'] == 'edit') {
答案 0 :(得分:5)
不幸的是,并非如此。您可以将此代码包装在一个函数中,并在每次需要时调用它。
function compareArrayItem($array, $key, $value) {
return isset($array[$key]) && $array[$key] == $value;
}
if (compareArrayItem($input_vars, 'directive', 'edit')) {
// Do something
}
但这对我来说似乎毫无意义(并且比原始代码的可读性差)。或者您可以将错误报告级别降低到不包括E_NOTICE
,这样您根本不需要第一个表达式。
error_reporting(E_ALL ^ E_NOTICE);
if ($input_vars['directive'] == 'edit') //...
但我不建议这样做只是为了缩短你的代码。
如果我是你,我只是不管它。这样很好。
答案 1 :(得分:1)
如果$input_vars
中的允许值集合已知并且您提及的检查到处都是以下帮助函数:
function item ($array, $key) {
if (isset ($array [$key]))
return $array [$key];
else
return NULL; // Or use whatever is more appropriate
}
然后原始代码可以更改为
if (item ($input_vars, 'directive') == 'edit') { ...
这不仅更具可读性,而且还消除了重复:数组变量和键只出现一次。
答案 2 :(得分:0)
我猜你会针对多个值测试$ input_vars ['directive'](否则,为什么你不会只在$ input_vars ['edit']或类似的东西中存储一个简单的布尔值?)。我还会猜测你是在一个接一个地做这些测试(如果'编辑'做X,否则如果'显示'做Y)。
在这种情况下,只需将isset()测试放在if语句中并将其他语句嵌套在其中(switch / case flow不是一个糟糕的选择)。
答案 3 :(得分:-1)
以下每次都会得到相同的结果。
if($input_vars['directive'] == 'edit'){
这是因为如果没有设置则不是'编辑',如果它'编辑'那么它的设置。
这确实会返回通知,但您可以从PHP安装中关闭该功能(不是说你应该)。
答案 4 :(得分:-2)
我会说:
if(@$input_vars['directive']=='edit') {
稍微更具可读性,如果不存在指令,它不会产生警告。