str_contains()最规范写法是直接用于if判断:if (str_contains($haystack, $needle)) {...},需确保参数为字符串类型,避免typeerror;空字符串恒返回true,且区分大小写。

在 PHP 8.2 中,str_contains() 是原生支持的函数,用在 if 判断里最规范的写法是:直接调用、不加额外转换、确保参数为字符串类型,并配合类型安全处理。
基础写法:语义清晰,一行判断
这是最推荐的写法,符合函数设计本意:
if (str_contains($haystack, $needle)) { ... }- 无需比较
=== true,因为函数明确返回bool - 避免写成
if (str_contains(...) == true)或if ((bool)str_contains(...)),冗余且降低可读性
参数安全:防止 TypeError 和 Warning
str_contains() 不做类型转换,传入非字符串会抛出 TypeError。尤其当变量来自 $_GET、$_POST 或文件操作时,需提前校验:
- 推荐容错写法:
if (is_string($haystack) && str_contains($haystack, $needle)) - 或封装为安全函数:
safe_contains($haystack, $needle)内部先判is_string - 不建议用
@抑制错误,掩盖问题而非解决问题
注意空字符串和大小写敏感性
这两个细节容易被忽略,但属于函数固有行为:
- 搜索空字符串
''恒返回true(如str_contains('abc', '') === true) - 该函数严格区分大小写,
str_contains('Apple', 'apple')返回false - 如需忽略大小写,改用
stristr($haystack, $needle) !== false,或先统一转小写再用str_contains(strtolower($haystack), strtolower($needle))
对比替代方案:为什么不用 strpos
在 PHP 8.2 环境下,strpos 已无必要用于单纯判断“是否包含”:
-
strpos($haystack, $needle) !== false更啰嗦,且易错(比如误写成!= false) -
str_contains语义直白、意图明确、执行效率相近 - 除非需要获取位置索引,否则不要为兼容旧版而放弃原生函数优势
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











