PHP错误或只是一个逻辑缺陷

PHP bug or just a logical flaw

提问人:KonKarOtMa 提问时间:9/26/2022 更新时间:9/26/2022 访问量:33

问:

我需要知道为什么,真正的逻辑原因,下面的比较正在执行“回声”线!这似乎是某种巫术。如果你去掉“+”号,它将不起作用。如果你保持原样,它会的!

<?php
  $fromUnits = "2";
  $toUnits = "100000000+";
  
  if ($fromUnits >= $toUnits) {
    echo "Bypassed."; // WHY?
  }
?>
PHP 比较 运算符

评论

0赞 Diego D 9/26/2022
并从文档中添加信息: 比较运算符 “在 PHP 8.0.0 之前,如果将字符串与数字或数字字符串进行比较,则在执行比较之前将字符串转换为数字。这可能会导致令人惊讶的结果”
0赞 Markus AO 9/26/2022
因为等等,但是当你比较字符串时。 不是一个格式正确的数字。此外,."2" < "a lot""2" > "!"100000000+"2" != "two""TWO" < "two"

答:

2赞 David 9/26/2022 #1

如果这两个字符串值能够被强制转换为数值,则将它们作为数字进行比较。而且这个数字确实大于这个数字.1000000002

但是,如果两个字符串都不能被强制转换为数字,则将它们作为字符串进行比较。并且字符串“大于”字符串,按字母顺序排序。"2""100000000+"

评论

0赞 KonKarOtMa 9/27/2022
这怎么不被认为是一个缺陷?
0赞 David 9/27/2022
@KonKarOtMa:我想这是PHP语言维护者们的意见问题。我个人是现在更严格的类型检查的粉丝,但PHP远非唯一具有各种类型强制规则的语言。