strstr() 不是避免对 strpos() 进行类型检查的方法。
如果 $needle 是 $haystack 中的最后一个字符,并且单独测试 $needle 作为布尔值将被评估为 false,那么测试 strstr() 作为布尔值将被评估为 false(因为如果成功,strstr() 将返回 $needle 的首次出现以及 $haystack 的其余部分)。
<?php
findZero('01234'); // 找到一个零
findZero('43210'); // 未找到零
findZero('0'); // 未找到零
findZero('00'); // 找到一个零
findZero('000'); // 找到一个零
findZero('10'); // 未找到零
findZero('100'); // 找到一个零
function findZero($numberString) {
if (strstr($numberString, '0')) {
echo '找到一个零';
} else {
echo '未找到零';
}
}
?>
此外,strstr() 比 strpos() 消耗更多内存,尤其是对于更长的字符串作为 $haystack,因此,如果您对 strstr() 返回的子字符串不感兴趣,就不应该使用它。
没有专门用于检查 $needle 是否出现在 $haystack 中的 PHP 函数;strpos() 通过返回 false 来告诉您它是否_没有_出现,但是,如果它_确实_出现,它会告诉您它出现在_哪里_,作为整数,如果 $needle 是 $haystack 的第一部分,则为 0(零),这就是为什么测试 if (strpos($needle, $haystack)===false) 是唯一确定 $needle 是否不是 $haystack 部分的方法。
我的建议是立即开始喜欢类型检查,并熟悉您使用的函数的返回值。
干杯。