str_contains语义明确、类型安全、行为稳定:直接返回布尔值避免松散比较陷阱,空字符串处理一致,意图清晰且与str_starts_with等函数风格统一,传非字符串参数立即报错便于早期发现问题。

str_contains 直接返回布尔值,语义明确,不用纠结返回的是 0 还是 false。
避免松散比较陷阱
strpos 找到子串在开头时返回 0,而 0 == false 成立,容易误判为“没找到”:
- ❌ 错误写法:
if (strpos($str, 'a') == false)—— 字符串以 'a' 开头就会出错 - ✅ 正确写法:
if (strpos($str, 'a') === false)—— 必须加三个等号,易漏、难维护 - ✅ str_contains:
if (str_contains($str, 'a'))—— 一步到位,无类型干扰
空字符串行为稳定可靠
传入空字符串 '' 作为子串时:
- str_contains('abc', '') 始终返回 true,定义清晰,无警告
- strpos('abc', '') 在 PHP 8.0 会触发 E_WARNING,8.1+ 虽已修复,但仍有兼容隐患
代码更直观,意图一目了然
当你只关心“有没有”,而不是“在哪”时:
-
str_contains($url, '/admin/')—— 意图就是判断存在性 -
strpos($url, '/admin/') !== false—— 多了一层逻辑转换,阅读成本高 - 配合 str_starts_with()、str_ends_with() 使用,风格统一,现代感强
类型安全,提前暴露问题
str_contains 要求参数必须是字符串:
- 传 null、数组或数字会直接抛出 TypeError,便于早期发现数据异常
- strpos 会尝试类型转换(如把数字转成字符串),可能掩盖源头问题
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











