Php 布尔值上的字符串比较

Php 布尔值上的字符串比较,php,conditional,boolean-operations,Php,Conditional,Boolean Operations,我很确定这是我的新手PHP知识中的一个简单的基本缺陷,但当发生以下情况时,我感到惊讶: $result为TRUE。。。那么,为什么它被认为等于字符串“email”?我猜这是因为,从技术上讲,这是一个bool,它不是假的?因此,当它与字符串(例如“email”)进行比较时,它返回true 我是否应该更改方法,将结果返回为包含“true”的字符串(而不是返回true;,如果成功),或者是否有其他方法可以这样做 谢谢。如果($result==“email”)会起作用,但就我个人而言,我绝不会这样做。

我很确定这是我的新手PHP知识中的一个简单的基本缺陷,但当发生以下情况时,我感到惊讶:

$result
TRUE
。。。那么,为什么它被认为等于字符串“email”?我猜这是因为,从技术上讲,这是一个
bool
,它不是假的?因此,当它与字符串(例如“email”)进行比较时,它返回true

我是否应该更改方法,将结果返回为包含“true”的
字符串(而不是
返回true;
,如果成功),或者是否有其他方法可以这样做


谢谢。

如果($result==“email”)
会起作用,但就我个人而言,我绝不会这样做。

是的,
true
与非空字符串相等(
=
)。但不完全相同(
==


我建议您仔细阅读。

它返回true,因为php将尝试转换某些内容,以便能够比较它们。在本例中,它可能会尝试将右侧的字符串转换为bool,在本例中为true。而true==true当然是真的


通过执行$result==“email”(triple=)可以告诉PHP它不应该进行转换,如果类型不匹配,则应返回false。

请粘贴代码而不是屏幕截图。@TJ,我发布屏幕截图的原因是它显示了
$result
的内容,并且它通过了条件测试。加上它实际上是三行代码。啊!这不是我的代码违反了编程规则,它只是PHP!为什么你永远不会那样做?我个人会选择两个变量。一个用于有效结果,另一个用于先前定义的错误。提高了代码的可读性,但我认为这纯粹是一种个人编码风格。应该留下这个注解。使用字符串比较函数而不是==不完全正确!空字符串(“”)和字符串零(“0”)被视为FALSE。其他的都是真的!