代码之家  ›  专栏  ›  技术社区  ›  Glen Solsberry

“更好”的写作方式?

php
  •  6
  • Glen Solsberry  · 技术社区  · 16 年前

    if (isset($input_vars['directive']) && $input_vars['directive'] == 'edit') {
    
    5 回复  |  直到 16 年前
        1
  •  5
  •   Sasha Chedygov    16 年前

    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') //...
    

    但我不建议仅仅为了缩短代码而这样做。

    如果我是你,我会 . 现在很好。

        2
  •  1
  •   Alexander Kogtenkov    16 年前

    如果 $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') { ...
    

        3
  •  0
  •   pdehaan    16 年前

    我猜您将针对多个值测试$input\u vars['directive'](否则,为什么不在$input\u vars['edit']或类似文件中存储一个简单的布尔值?)。我还想冒险猜测一下,您正在一个接一个地进行这些测试(如果'edit'执行X,如果'display'执行Y)。

    在这种情况下,只需将isset()测试放在if语句中,并将其他测试嵌套在该语句中(switch/case流不会是一个错误的选择)。

        4
  •  -1
  •   Jonathan Czitkovics    16 年前

    下面的每一次都会产生相同的结果。

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

    这是因为如果它没有设置,那么它就不是“编辑”,如果它的“编辑”,那么它的集。

    这确实会返回一个通知,但是您可以从PHP安装中关闭该功能(并不是说您应该这样做)。

        5
  •  -2
  •   Daniel    16 年前

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

    它的可读性会稍微好一点,而且如果指令不存在,它不会产生警告。

    推荐文章