代码之家  ›  专栏  ›  技术社区  ›  chaimp

PHP中的条件运算符快捷方式?

  •  0
  • chaimp  · 技术社区  · 16 年前

    有人知道PHP中是否有以下语句的快捷方式吗?

    $output = isset($some_value) ? $some_value : "Some Value Not Set";
    echo $output;
    

    这是我经常遇到的问题,其中$some_值实际上非常长,可能包含一个函数,例如:

    $output = $this->db->get_where('my_db',array('id'=>$id))->row()->some_value) ? $this->db->get_where('my_db',array('id'=>$id))->row()->some_value) : "Some Value Not Set";
    echo $output;
    

    似乎应该有一个运算符或函数来实现这一点。我可以很容易地写一封信,我不是在寻找答案,而是如果有人知道一个内置的快捷方式。

    6 回复  |  直到 16 年前
        1
  •  4
  •   ax. Clement Herreman    16 年前

    如果需要在 ? ,可以将它赋给测试中的变量(因为赋值是返回赋值的表达式),并在 ? :

    $output = ($some_value = $this->db->get_where('my_db', array('id' => $id))->row()->some_value))
      ? $some_value 
      : "Some Value Not Set";
    echo $output;
    
        2
  •  8
  •   chelmertz user1604064    16 年前

    由于php 5.3,可以省略三元运算符的中间部分。表达式expr1?:expr3如果expr1的计算结果为true,则返回expr1,否则返回expr3。

    http://php.net/manual/en/language.operators.comparison.php

        3
  •  4
  •   chaos    16 年前

    为此,在使用条件运算符之前,应该使用数据库调用的结果设置一个变量。您的示例使数据库调用两次。

    例如:

    $output = $this->db->get_where('my_db',array('id'=>$id))->row()->some_value);
    $output = $output ? $output : "Some Value Not Set";
    echo $output;
    

    有了这一点,这是一个很好的例子,在这种情况下,最好不要使用条件运算符,这实际上并不意味着将其用作通用的if-then快捷方式。

        4
  •  4
  •   innaM    16 年前

    你似乎害怕空白。使用它!慷慨地!如果在问号和冒号之前和之后分别添加一个空格,那么您的代码就非常容易阅读。如果语句太长,请添加新行。试试看,它不会伤害你的。

        5
  •  3
  •   chaos    16 年前

    我相信条件运算符是快捷方式:)为了保存函数调用和可读性,我建议先将值保存到变量。

    $some_value = $this->db->get_where('my_db',array('id'=>$id))->row()->some_value);
    $output = $some_value ? $some_value : "Some Value Not Set";
    echo $output;
    
        6
  •  1
  •   Lizard    16 年前

    最好的办法是:

    $output = $this->db->get_where('my_db',array('id'=>$id))->row()->some_value)
    echo $output =($output)?$output:"Some Value Not Set";
    

    然后只执行一次!