PHP中布尔值true/false输出行为及相关问题咨询
关于PHP布尔值true/false的输出与行为问题
测试代码的异常原因
你给出的测试代码:
$falsevar = false; $truevar = true; echo "falsevar which I just set to false is".$falsevar; //预期输出false,实际无对应内容 echo "truevar which I just set to true is".$truevar; //输出1
实际输出合并成一行且$falsevar无内容,核心原因是PHP的自动类型转换:
- 当布尔值
false参与字符串拼接时,会被自动转换为空字符串"",所以第一个echo的输出里没有对应false的内容; - 布尔值
true参与字符串拼接时,会被自动转换为字符串"1",所以第二个echo能输出1。
两个echo连续执行没有换行,最终输出就会连在一起。
业务代码的输出问题
你的业务场景代码:
$prompt = "I would like a sandwich to eat"; $myarray = array("pizza", "hamburger", "hot dog"); $wantsItem = false; foreach ($myarray as $needle) { if (strpos($prompt, $needle) != false) { echo "Match found: {$needle}\n"; $wantsItem = true; } } echo "wants item is".$wantsItem;
因为$prompt中不存在$myarray里的任何关键词,strpos始终返回false,所以$wantsItem保持初始值false。输出时同样因为false被转为空字符串,最终只会输出wants item is,后面没有内容。
另外注意:这里的条件判断strpos(...) != false存在隐患——如果匹配的子串刚好在字符串的起始位置(索引0),strpos会返回0,而在松散比较中0 != false会被判定为false,导致漏判。正确的写法应该用严格不相等!== false来区分索引0和布尔值false。
PHP布尔值的核心行为总结
- 字符串上下文转换:
false→ 空字符串""true→ 字符串"1"
- 松散比较规则:
false和以下值松散相等(==):0、0.0、空字符串""、仅含空格的字符串" "、空数组[]、nulltrue和除上述“假值”之外的非布尔值松散相等(比如1、"1"、非空数组等)
- 严格比较:只有当两个变量的类型和值都相同时,
===才会返回true,!==才会返回true。在判断strpos这类可能返回0或false的函数结果时,必须用严格比较避免逻辑错误。
内容的提问来源于stack exchange,提问作者user6631314
相关产品推荐
相关产品推荐

