在比较一些字符串值时,我在PHP中遇到了一个奇怪而意外的行为。下面的前两个语句返回了true,但我希望它们返回false。最后一条语句按预期返回false。我知道PHP的类型转换,但根据文档,我理解的是类型转换发生在比较两种不同的数据类型(如字符串和整数)时。然而,在下面的示例中,两个文字都是字符串。这是否意味着当您在PHP中进行字符串比较时,它会检查两个字符串是否看起来像整数,如果是,则将它们都强制转换为整数,然后比较这些整数值。所以我的问题是,在什么条件下会发生这种行为,PHP中的字符串比较如何工作?
var_dump("10" == "10.0000");
var_dump("10" == "+10.");
var_dump("10" == "10 ");
#output
bool(true)
bool(true)
bool(false)
更新
那么下面baba的回答涉及数字字符串的比较 真的帮助我理解了正在发生的事情。函数 is_numeric 将返回一个字符串是否被认为是数字字符串。有趣的是,"10 "
不被认为是数字字符串,但 " 10"
是。我查看了PHP源代码,我相信 is_numeric的实现 在 is_numeric_string_ex 函数中。从这可以确定PHP何时将把一个字符串视为数字字符串。
===
或者更明确的strcmp
/strcasecmp
,而不是接受类型转换。 - DCoder==
运算符。像许多PHP功能一样,它包含太多的魔法。你可以尝试理解所有类型转换的异常,但最好避免使用它。 - GolezTrol