关于php preg_replace_callback回调函数传参问题

preg_replace_callback

这个函数的作用是执行一个正则表达式搜索并且使用一个回调进行替换

preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed

参数说明

  • pattern

要搜索的模式,可以是字符串或一个字符串数组。

  • callback

一个回调函数,在每次需要替换时调用,调用时函数得到的参数是从 subject 中匹配到的结果。回调函数返回真正参与替换的字符串。这是该回调函数的签名:

  • handler ( array $matches ) : string

经常会需要 callback 函数而仅用于 preg_replace_callback() 一个地方的调用。在这种情况下,你可以使用 匿名函数 来定义一个匿名函数作为 preg_replace_callback() 调用时的回调。 这样做你可以保留所有调用信息在同一个位置并且不会因为一个不在任何其他地方使用的回调函数名称而污染函数名称空间。

Example #1 preg_replace_callback() 和 匿名函数

<?php
/* 一个unix样式的命令行过滤器,用于将段落开始部分的大写字母转换为小写。 */
$fp = fopen("php://stdin", "r") or die("can't read stdin");
while (!feof($fp)) {
    $line = fgets($fp);
    $line = preg_replace_callback(
        '|<p>\\s*\\w|',
        function ($matches) {
            return strtolower($matches[0]);
        },
        $line
    );
    echo $line;
}
fclose($fp);
?>
  • subject

要搜索替换的目标字符串或字符串数组。

  • limit

对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是 -1(无限制)。

  • count

如果指定,这个变量将被填充为替换执行的次数。

如何传参

默认情况下,这个回调函数只会接收$matches这个匹配参数,如果想要传递更多的参数,我们可以采用迂回战术,正所谓条条大路通罗马,我们只要能在匿名函数中访问到需要传递的参数就行。于是我们有两个办法。

1.使用全局变量

$param1 = "test";
preg_replace_callback($pregRule, function ($match) {
    global $param1;
    return $match[1] . $param1 . $match[3];
}

2.使用面向对象加载类

class Scrapy{
   private $param1 = "test";
   public function info(){
      preg_replace_callback($pregRule, function ($match) {
            return $match[1] . $this->param1 . $match[3];
        }
   }
}

通过上面的两种方法我们就可以在回调函数中调用我们想要传入的参数。

总结

办法总比问题多,遇到不能解决的问题,如果换一个思路,可能就会柳暗花明。

关于关于php preg_replace_callback回调函数传参问题的文章就分享到这,如果对你有帮助欢迎继续关注我们哦

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/42115.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
php学习php学习订阅用户
上一篇 2022年6月25日 01:24
下一篇 2022年6月25日 01:25

相关推荐

  • PHP递归思想说明

    说明:在一个函数内部再次有条件调用自己(当前函数),这个时候就称为“递归调用”,即自己调用自己。 代码 图解 注意: 递归调用必须有一个可以退出的条件,否则无法退出递归调用,就会成死归,也就是说必须逐渐的退…

    2018年4月7日
    0190
  • PHP8中的函数:str_contains()的实用技巧。

    PHP8中新增的str_contains()函数是一种非常实用的字符串处理功能,它能够快速地判断一个字符串是否包含某一个子字符串。在实际应用中,它可以帮助我们快速定位出数据中的关键字,从而更加高效地进行数据处理和分析…

    2023年5月21日
    00
  • PHP实现邮件群发时的防垃圾邮件技术。

    随着互联网的普及,邮件已成为人们日常生活中不可或缺的重要通信方式之一。邮件群发可以快速、高效地将信息传达给大量的用户,因此在企业、宣传、销售等方面被广泛应用。然而,邮件群发也面临着垃圾邮件的问题。垃…

    2023年5月23日
    00
  • PHP入门指南:Unix域套接字。

    PHP入门指南:Unix域套接字PHP是一种流行的服务器端脚本语言,它可以用于开发Web应用程序、命令行工具等应用。在PHP中,Unix域套接字是一种非常有用的通讯方式,它提供了一种轻量级、高效、可靠的进程间通信方法,…

    2023年5月22日
    00
  • 分享php500错误怎么看到错误信息。

    在PHP编程中,错误是不可避免的,我们可能会遇到500错误,这种错误通常表示服务器遇到了一个未知的情况,无法完成请求,要查看这个错误的详细信息,我们需要打开PHP的错误报告功能,并查看错误日志文件。 我们需要…

    2024年6月15日
    00
  • php微信第三方实现一键登录及获取用户信息的方法(附代码)

    具体如下: 注意:要使用微信在第三方网页登录是需要“服务号”才可以哦,所以必须到官方申请。 一开始你需要进入微信公众平台开启开发模式,并且填写oauth2的回调地址,地址填写你项目的域名就可以了.比如:www.baidu.c…

    2018年3月2日
    0234
  • 使用PHP连接PostgreSQL数据库。

    PHP是一种广泛使用的服务器端脚本语言,它可以与多种数据库进行交互。PostgreSQL是一种关系型数据库管理系统,它是一项非常流行的开源数据库解决方案。本文将介绍如何使用PHP连接PostgreSQL数据库。一、安装Postgre…

    2023年5月21日
    04
  • php如何使用ThinkPHP7框架。

    随着互联网技术的发展,PHP作为一种重要的编程语言,在网站开发中被广泛应用。而ThinkPHP框架作为一种优秀的PHP框架,其具有高效、可扩展以及易于维护等优点。本文将介绍如何通过ThinkPHP7框架来进行PHP开发。一、…

    2023年6月3日
    01

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息