答案 1
因为您正在使用 ==(相似性)运算符,而 PHP 正在将字符串强制转换为 int。
要解决此问题,请使用 ===(相等)运算符,该运算符不仅检查值是否相同,还检查数据类型是否相同,因此“123”字符串和 123 int 不会被视为相等。
答案 2
在PHP(和JavaScript - 其行为略有不同)中,比较运算符的工作方式与在C或Java等强类型语言中的工作方式不同。操作员具有您最有可能期望的行为。以下是两个比较运算符的细分,因为它们适用于 PHP。==
===
==
这个运算符被正式称为“平等”运算符,尽管这并不真正符合“平等”一词的正常定义。它执行所谓的类型杂耍比较。如果两个操作数的类型不匹配(在您的示例中,是一个整数并且是一个字符串),PHP 会将操作数隐式转换为彼此的类型,并测试新类型值的相等性,如下所示:1234
1234 test
<?php
var_dump( (int) 'hi' ); // int(0)
var_dump( (string) 0 ); //string("0")
var_dump( 'hi' == 0 ); // bool(true)
var_dump( (int) '1hi' ); // int(1)
var_dump( 1 == '1hi' ); // bool(true)
它有一个对应的(类型杂耍)不等式运算符 。!=
===
该运算符称为“相同”运算符,它对两个操作数的值和类型执行严格检查,并且不执行任何隐式强制转换。因此,不会也不会 。===
"0"
=== 0
"1234 test"
=== 1234
<?php
var_dump( '1234 test' === 1234 ); // bool(false)
它有一个对应的(严格)不等式运算符 。!==
怪癖
请注意,操作员对某些人认为奇怪的对象具有行为。假设我们有和变量,定义如下:===
class A
$a
$b
<?php
class A {
public $property = 'default value';
}
$a = new A();
$b = new A();
您可能希望输出 。它实际上会返回 false。当用于对象时,运算符实际上会检查两个操作数是否是对同一对象的引用。在此实例中,运算符通过检查对象的属性来工作,因此 .var_dump($a === $b);
bool(true)
==
$a == $b
PHP 手册链接
推荐
-
相当于Java中PHP的crypt函数 我正在将我的PHP代码迁移到Google App Engine - Java。因此,我需要一个相当于Java中PHP的crypt函数,因为我已将使用crypt的注册用户的所有密码存储在我的数据库中。 编辑1:这是我用于加密密码的php
-
需要有关如何从接受语言请求标头获取首选语言的示例 我需要一个代码示例或库来解析标头并返回我的首选语言。 指出: “接受语言请求标头”字段类似于“接受”,但限制首选作为请求响应的自然语言集。语言标记在第 3.10 节中定义。
-
无法在 Java 和 PHP 之间交换使用 AES-256 加密的数据 我的问题是:我在Java中加密的东西,我可以在Java中完全解密,但PHP不能解密。我用加密的内容可以使用 解密,但不能在 Java 中解密。 我想从Java应用程序发送和接收加密数据到PHP页面,所以我
-
-
Quercus是Java环境中PHP的可行替代品吗? 对于任何偶然发现这个问题的人,他们不知道是什么 - 它是用Java完成的PHP的实现。 对于我目前正在从事的项目,我们通过cgi在servlet上提供php页面(我知道它很笨拙,但这是支持遗留代码的要求
标签