is_int($_GET['pid']) ? define(PRODUCT, $_GET['pid']) : die('Invalid Product Id');
即使pid的值是整数,我仍然会收到无效的产品ID消息。为什么?这个简单的PHP代码有什么问题?
is_int($_GET['pid']) ? define(PRODUCT, $_GET['pid']) : die('Invalid Product Id');
即使pid的值是整数,我仍然会收到无效的产品ID消息。为什么?这个简单的PHP代码有什么问题?
像manual这样说:要测试一个变量是一个数字还是一个数字字符串(例如表单输入,它总是一个字符串),您必须使用is_numeric()。
编辑:虽然这是我的答案暗示在这里,但我会更具体:$_GET
的内容是字符串,所以is_int
调用将始终返回false。如果您真的想在此验证的是某个字符串的内容代表
整数
数字,您可以使用致电is_numeric
。
“...以验证...特定字符串的内容代表整数,您可以使用对is_numeric的调用。”不可以。您可以使用_is_numeric()_仅验证它是一个数字,而不是一个整数。见克里斯的答案。 – GZipp 2011-01-08 20:24:16
$_GET[]
总是返回字符串,所以is_int()
总是计算为false
。改为尝试is_numeric()
。
$_GET
中的任何内容都是字符串,并且is_int("2")
返回false
。
$ _GET数组中的值通常是字符串类型,但有时也是类型数组。
使用ctype_digit()检查一个字符串是否完全是数字字符。可选地,首先修剪()字符串。如果你想接受有时被数值解释的各种格式的字符串,比如小数点,科学记数法,十六进制字符串等,只能使用is_numeric()...
你可以在例子中看到:`var_dump(is_int (“23”));`打印`布尔(假)`。并实际回答你的问题:你的代码没有问题。只有(imo)是你不应该用这种方式使用三元运算符。如果您实际分配了一个值,您应该只使用它(再次:imo)。 – 2011-01-08 20:04:36
不是答案,只是建议:不要使用三元运算符`::`来控制流程(执行一条语句或另一条语句)。它的意思是用作表达式,例如`x =(y> 5?'high':'low')`。在这种情况下,使用`if(...){...} else {...}`。 – 2011-01-08 20:05:36