将$val * 1乘以转换为零的null是“不好”的做法吗?

3
我正在使用 PHP 5.5 从一个 PostgreSQL 数字数据库表字段中检索数字值。该字段可能为 null 或实际数字,无论何种情况,我都会将其存储在变量中。如我们所知,null * 1 = 0,这是我喜欢做的事情,但我担心这是否错误或者将潜在的 null 值转换为零而不必实际检查该值是否是不好的惯例。请参见以下内容: ... $fieldVal *= 1; //假设此时此处保存了 DB 返回的值 ... 因此,如果数据库返回 null,则 $fieldVal 将被转换为零,任何非 null 值将保持不变。非常感谢您的帮助。

您可以使用类型转换,例如(int)$fieldVal - TheDrot
在这种情况下,我会使用'is_null'函数,但我不确定您在使用此脚本的上下文中,您能否添加更多的上下文?您正在使用哪个函数来获取字段值? - Tomás Cot
1
@TomásCot 不确定 is_null 函数是否存在于Postgres中,最好使用ansi函数 COALESCE - Juan Carlos Oropeza
@JuanCarlosOropeza,你是对的。我曾考虑用PHP来实现它。但如果他不打算更改数据库引擎,你的解决方案更好。 - Tomás Cot
2个回答

5

将查询更改为包括COALESCE并解决空值情况。

SELECT fieldNane

To

SELECT COALESCE(fieldName, 0)

顺便说一句:是的,引入那种 hack 是不好的实践。


1
这真的取决于你与谁交流,关于检查 null 和整数的方法是否是不良实践。在软件开发中,有一千种方法可以执行单个任务,所以这确实是一个观点问题。
我个人认为这是不良实践,因为 PHP 提供了工具来检查变量是否包含 null 或整数类型。其中一些工具是像 is_int() 或 is_null() 这样的函数。
虽然这些函数在某些方面也有缺陷,但我的观点是,如果语言有提供工具来执行你认为你正在“黑客”工作的事情,请使用语言提供的工具。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接