1)我想了解为什么当我在php中调用bigint
时为什么将存储为'string'
的数字数据视为gettype();
。
2)是否有诸如PHP的is_bigint();
之类的函数可以检查变量是否为bigint。
3)当bigint乘以1或在由数字和字母混合的字符串中加0时,如何重新检查数据类型,将重新运行'Notice: A non well formed numeric value encountered in line 2'
并在现在乘以的数据类型上调用gettype();
返回:integer
答案 0 :(得分:3)
简单的答案是PHP没有bigint类型。数据库驱动程序,或者无论从何处获得该值的,都将您的数据作为字符串提供,因为这是表示该值的唯一可靠方法。
在64位系统上,PHP的int类型应为带符号的64位整数;但在32位系统上,它将是32位,因此您的值将不合适。您可以通过回显PHP_INT_MAX
built-in constant来进行仔细检查,它为您提供了在PHP构建中可以存储为整数的最大值。
要确定值是否全部为数字,可以使用ctype_digit($value)
,但是对于负数,这将不起作用,因为-
不是数字。我所知道的最好方式是使用正则表达式,例如preg_match('/^-?[0-9]+/', $value)
。
如果您的值合适(即介于PHP_INT_MIN
和PHP_INT_MAX
之间),则可以使用(int)$value
或intval($value)
将字符串转换为整数,而无需技巧例如+0
或*1
。
如果不这样做,则需要将它们处理为浮点数,如果操作的结果对于整数而言太大,PHP就会这样做,但意味着存储不精确;或使用GMP或BCMath之类的任意精度的数学模块。