【发布时间】:2015-04-09 12:19:44
【问题描述】:
在显示从数据库检索的值时,可能存在也可能不存在的值,我的 PHP 代码有很多这样的:
if ( isset( $data['a'] ) )
$a = number_format( $data['a'] );
else
$a = '–';
if ( isset( $data['b'] ) )
$b = number_format( $data['b'] );
else
$b = '–';
(例如,简化;$data['a'] 实际上类似于 $data[$date][$part]['errors']。)随后是 <td><?= $a ?></td> 和 <td><?= $b ?></td>。
使用?: 代替if 使代码在垂直方向上更紧凑但更丑陋。我想把它放在一个函数中,这样我就可以拥有
$a = someFunction( $data['a'] );
$b = someFunction( $data['b'] );
相反,这要好得多。但是将未设置变量作为函数参数会导致两个警告,一个是未设置变量,另一个是缺少函数参数。如果我做明显的功能并用@调用它...
function formatIfAvail( $num, $dec = 0 )
{
if ( isset( $num ) )
return number_format( $num, $dec );
return '–';
}
....
$a = @formatIfAvail( $data['a'] );
...它工作,但这似乎是一个糟糕的解决方案。 有没有办法在没有任何@ 的情况下做到这一点?如果 PHP 有 C++ 预处理器,我会使用 #define 这样的东西...
#define NUMFMT( n, d ) ( isset( n ) ? number_format( n, d ) : '–' )
....
$a = NUMFMT( $data['a'], 0 );
...但当然不是。
【问题讨论】:
-
在变量中使用@,而不是在函数中。 someFunction(@$data['a'])
-
除了使用@或带有错误报告功能的全局方式之外,没有其他方法可以抑制警告
-
你怎么不知道
data['a']是否存在?您不应该掩盖输入检查,尤其是当您的数据是用户输入时。 -
通过引用传递 var:formatIfAvail( & $num, $dec = 0 )。你不会收到通知。
-
不推荐通过调用时引用传递