PHP8.4推出的str_contains函数是字符串处理模块的重要新增功能,专门用于判断一个字符串是否包含指定的子字符串,解决了以往判断包含关系需要调用strpos再处理返回值的繁琐问题。

str_contains函数基本语法
str_contains函数的语法非常简单,只有两个必填参数,定义如下:
<?php // 函数语法 bool str_contains(string $haystack, string $needle) ?>
其中$haystack表示被搜索的主字符串,$needle表示要查找的子字符串,函数返回布尔值,当主字符串包含子字符串时返回true,否则返回false。
基础使用示例
下面是最简单的使用场景,判断一个完整的句子是否包含某个关键词:
<?php $content = "PHP8.4新增了很多实用的字符串处理函数"; $keyword = "字符串处理"; // 判断$content是否包含$keyword $result = str_contains($content, $keyword); var_dump($result); // 输出 bool(true) // 查找不存在的子字符串 $no_exist = "数组操作"; $result2 = str_contains($content, $no_exist); var_dump($result2); // 输出 bool(false) ?>
注意事项
- 函数对大小写敏感,如果需要不区分大小写的判断,需要先将两个字符串都转为小写或大写再调用函数。
- 当
$needle为空字符串时,函数会始终返回true,因为空字符串是任何字符串的子字符串。 - 参数必须是字符串类型,如果传入其他类型,PHP会自动尝试转换为字符串,可能会触发类型转换警告。
和旧版判断方式对比
在PHP8.4之前,判断字符串包含关系通常使用strpos函数,写法如下:
<?php $content = "PHP8.4新增了很多实用的字符串处理函数"; $keyword = "字符串处理"; // 旧版判断方式 $result = strpos($content, $keyword) !== false; var_dump($result); // 输出 bool(true) ?>
对比可以看出,str_contains函数的写法更加直观,不需要额外的不等于判断,逻辑更清晰,减少了出错的概率。
常见使用场景
验证用户输入内容
比如判断用户提交的留言是否包含敏感词:
<?php
$user_input = $_POST['comment'] ?? '';
$sensitive_word = "广告";
if (str_contains($user_input, $sensitive_word)) {
echo "留言包含敏感内容,请修改后提交";
} else {
echo "留言提交成功";
}
?>
路径或URL判断
判断请求路径是否包含指定的模块标识:
<?php
$request_uri = "/admin/user/list";
if (str_contains($request_uri, "/admin/")) {
echo "这是后台管理模块的请求";
}
?>
str_containsPHP8.4字符串包含判断php_string_function修改时间:2026-06-24 18:48:27