PHP:计算时转换为int是否更干净?

PHP:计算时转换为int是否更干净?,php,types,casting,type-conversion,Php,Types,Casting,Type Conversion,我正在编写一个函数,它接受一个数字字符串作为参数,然后用它进行一些计算并返回它 正如您可能注意到的,我正在使用字符串进行计算。虽然它在PHP中工作没有问题,但我知道其他语言会抛出错误。这就引出了我的问题: 我应该在计算之前将字符串转换为整数,然后使用int进行计算并将结果再次转换为字符串吗?不知怎的,那会是一种更干净的风格吗?或者,在PHP中使用“类型不特定”真的可以吗?PHP是一种松散类型的语言,因此您在使用字符串数据执行计算时不会遇到问题,因为解析器会为您执行类型转换 请注意,如果您要进行非

我正在编写一个函数,它接受一个数字字符串作为参数,然后用它进行一些计算并返回它

正如您可能注意到的,我正在使用字符串进行计算。虽然它在PHP中工作没有问题,但我知道其他语言会抛出错误。这就引出了我的问题:


我应该在计算之前将字符串转换为整数,然后使用int进行计算并将结果再次转换为字符串吗?不知怎的,那会是一种更干净的风格吗?或者,在PHP中使用“类型不特定”真的可以吗?

PHP是一种松散类型的语言,因此您在使用字符串数据执行计算时不会遇到问题,因为解析器会为您执行类型转换


请注意,如果您要进行非常精确的计算,这需要大量的浮点精度,那么从编程的角度来看,您需要使用

,最好考虑一下为什么要使用数字字符串进行计算。为什么不使用整数输入和整数输出?

我建议您检查参数是否是带数字的。我认为处理不正确的函数调用很重要。我也不认为有任何理由为计算强制转换操作数——PHP会为我们这样做。但我更愿意返回特定类型的结果,以用于可预测的JSON序列化或DB驱动程序的行为

function calc($a, $b) {
    if (!ctype_digit($a) || !ctype_digit($b)) {
        throw new \InvalidArgumentException('A and B must be an integers');
    }

    return (string) ($a + $b);
}

php是一种松散类型的语言是有原因的。我会说不。有数学运算符和连接运算符。谢谢你的回答!只是一个附带问题:为什么在InvalidArgumentException之前键入反斜杠?这在使用时是必需的。类
InvalidArgumentException
属于根命名空间。只需重新阅读主题标题
是数值的
不仅对
4
这样的字符串返回
true
,而且对
4.5
0x56fc
也返回
true。我认为如果您的输入始终是字符串,那么使用它会更好。刚刚编辑了答案。