如何用PHP匹配语句中的布尔值?(AWS S3开发场景)
问题分析与解决办法
你遇到的核心问题是把布尔类型的返回值当成字符串来处理了,这才导致判断逻辑失效。
为什么你的原代码总是返回true?
你写的这段代码:
if(stripos($string, true) !== false){ echo "true"; } else{ echo "false"; }
这里的问题在于,PHP会自动把布尔值true转换成整数1,所以stripos其实是在你的字符串里查找字符"1",而不是字符串"true"。只要返回的响应字符串里包含任何能被识别为1的内容,这个判断就会返回true,完全起不到判断布尔值的作用。
正确的处理方式
根据AWS的文档,doesObjectExist方法直接返回布尔类型的结果(不是字符串,也不是CFResponse对象),所以你根本不需要做字符串匹配,直接对返回值进行条件判断即可:
// 假设$response是doesObjectExist方法的返回值 if ($response) { echo "对象存在"; } else { echo "对象不存在"; }
或者像你后来编辑的那样,直接返回对应的布尔值:
if($response == FALSE){ return false; }else{ return true; }
(其实这段代码可以简化成return (bool)$response;,不过你的写法也完全没问题)
总结
记住,当方法明确返回布尔类型时,直接用布尔值的判断逻辑就好,不要画蛇添足转换成字符串去匹配,这只会引入不必要的类型转换错误。
内容的提问来源于stack exchange,提问作者Dinesh Gurjar
相关产品推荐
相关产品推荐

