0

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

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

这是我经常遇到的事情,其中​​ $some_value 实际上很长并且可能涉及一个函数,例如:

$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;

似乎应该有一个运算符或函数来执行此操作。我可以很容易地写一个,我不是在寻找那个答案,而是如果有人知道内置的快捷方式。

4

6 回答 6

9

从 PHP 5.3 开始,可以省略三元运算符的中间部分。表达式 expr1 ?:如果 expr1 的计算结果为 TRUE,则 expr3 返回 expr1,否则返回 expr3。

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

于 2009-10-15T18:46:35.477 回答
4

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

例如:

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

既然已经确定了,这是一个很好的例子,不使用条件运算符真的更明智,它真的不打算用作通用的 if-then 快捷方式。

于 2009-10-15T18:43:40.193 回答
4

如果您需要在 之后重用测试中的长表达式?,您可以将其分配给测试内的变量(因为赋值是返回分配值的表达式)并在 之后使用此变量?

$output = ($some_value = $this->db->get_where('my_db', array('id' => $id))->row()->some_value))
  ? $some_value 
  : "Some Value Not Set";
echo $output;
于 2009-10-15T18:46:58.063 回答
4

你似乎害怕空白。用它!自由地!如果您分别在问号和冒号前后添加一个空格,您的代码会更容易阅读。如果您的语句太长,请添加换行符。试试看,它不会伤害你。

于 2009-10-15T19:28:21.007 回答
3

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

$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;
于 2009-10-15T18:44:20.740 回答
1

最好的方法是:

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

只执行一次!

于 2009-10-15T18:46:47.897 回答