Php 如果在比较整数和字符串时返回错误的结果
不确定我是否没有看到什么东西,但我有一个简单的Php 如果在比较整数和字符串时返回错误的结果,php,if-statement,Php,If Statement,不确定我是否没有看到什么东西,但我有一个简单的id验证 $id = '2s2'; var_dump($id); var_dump($id*1); if ($id != ($id*1) || $id <= 0) { die('wrong id'); } die('here?'); 它检查id是否与id乘以1相同,或者如果值为零或更低,则检查。因为,$id='2s2它不一样(可以在转储中看到) 为什么这不回显错误的id?我猜您可以将它乘以1,看看$id是否是数字。在这种情况下,您可
id
验证
$id = '2s2';
var_dump($id);
var_dump($id*1);
if ($id != ($id*1) || $id <= 0) {
die('wrong id');
}
die('here?');
它检查id
是否与id乘以1相同,或者如果值为零或更低,则检查。因为,$id='2s2代码>它不一样(可以在转储中看到)
为什么这不回显错误的id
?我猜您可以将它乘以1,看看$id
是否是数字。在这种情况下,您可以简单地:
if (!is_numeric($id) || $id <= 0) {
die('wrong id');
}
如果(!is_numeric($id)|$id我猜你将它乘以1,看看$id
是否是数字。在这种情况下,你可以简单地:
if (!is_numeric($id) || $id <= 0) {
die('wrong id');
}
如果(!is_numeric($id)| |$id当您比较两个不同类型的变量(并执行一些其他操作)时,PHP会执行一个名为的操作。基本上,它会在对两个操作数进行操作之前尝试将它们转换为相同的类型
在这种情况下,PHP会反直觉地将两个操作数都转换为整数。的规则基本上是“从字符串的开头提取字符,直到找到非数字,然后丢弃其余的字符”
因此,左边的$id
实际上是“2s2”
,从非整数部分剥离为“2”
,然后与右边的操作数进行比较。右边的操作数($id*1)
基本上经过相同的过程-在数学上下文中,PHP被迫将字符串视为整数
如果($id!==($id*1))
,您可以使用严格的比较运算符——这样您就可以告诉PHP您不希望涉及类型转换,结果将如您所期望的那样
还有一种更简单的方法可以测试$id
是否为整数:当您比较两个不同类型的变量(并执行一些其他操作)时,PHP会执行一个名为的操作。基本上,它会在对两个操作数进行操作之前,尝试将两个操作数转换为相同的类型
在这种情况下,PHP会反直觉地将两个操作数都转换为整数。的规则基本上是“从字符串的开头提取字符,直到找到非数字,然后丢弃其余的字符”
因此,左边的$id
实际上是“2s2”
,从非整数部分剥离为“2”
,然后与右边的操作数进行比较。右边的操作数($id*1)
基本上经过相同的过程-在数学上下文中,PHP被迫将字符串视为整数
如果($id!==($id*1))
,您可以使用严格的比较运算符——这样您就可以告诉PHP您不希望涉及类型转换,结果将如您所期望的那样
还有一种更简单的方法来测试$id
是否为整数:为什么要将字符串相乘?顺便说一句,一切乘以1就是它本身,不是吗?@PhiterFernandes哦,好吧,听起来很脏:)如果目的是将其转换为整数,那么使用(int)不是更明智吗
或其他指定方法?而不是将其与1相乘:如果将数字与字符串进行比较,或比较涉及数字字符串,则每个字符串将转换为一个数字并执行比较numerically@Albzi不,这将永远不会匹配,因为您将比较字符串和整数,并且2!='2'
。为什么要将字符串相乘?顺便说一句,一切都乘以1,不是吗?@PhiterFernandes哦,好吧,听起来很脏:)如果目的是将其转换为整数,那么使用(int)
或其他指定方法不是更聪明吗?而不是将其与1相乘:如果将数字与字符串进行比较,或者比较涉及数字字符串,则将每个字符串转换为数字并执行比较numerically@Albzi不,这将永远不会匹配,因为您将比较字符串和整数,并且2!='2'
。嘎不敢相信我犯了那个错误!对我来说绝对是休息日。嘎不敢相信我犯了那个错误!对我来说绝对是休息日。