在比较一些字符串值时,我在 PHP 中遇到了一个奇怪且意外的行为。当我希望它们返回 false 时,下面的前两个语句返回 true。最后一条语句按预期返回 false。我知道 PHP 的Type Juggling,但我从文档中了解到,当您比较两种不同的数据类型(如字符串和整数)时,会发生类型杂耍。在下面的示例中,虽然两个文字都是字符串。这是否意味着当您在 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 何时将字符串视为数字字符串。