写这个“更好”的方式?

时间:2010-05-06 18:40:19

标签: php

有没有更好的(即更易读)的方式来写这个?

if (isset($input_vars['directive']) && $input_vars['directive'] == 'edit') {

5 个答案:

答案 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') {

稍微更具可读性,如果不存在指令,它不会产生警告。