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() 返回的子字符串不感兴趣,则无论如何都不应该使用它。
没有 PHP 函数仅用于检查 $needle 是否出现在 $haystack 中;strpos() 通过返回 false 来告诉您它是否_没有_出现,但是,如果它确实出现了,它会告诉您它_在哪里_出现,这是一个整数,如果 $needle 是 $haystack 的第一部分,则为 0(零),这就是为什么测试 if (strpos($needle, $haystack)===false) 是唯一确保知道 $needle 是否不是 $haystack 的一部分的方法。
我的建议是立即开始喜欢类型检查,并熟悉您正在使用的函数的返回值。
干杯。