关于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:25
下一篇 2022年6月25日 01:25

相关推荐

  • PHP中的水平扩展。

    PHP是一种广泛应用于Web开发的脚本语言,它的流行度和应用范围都在不断扩大。但在PHP的应用中,我们有时候会遇到一些性能问题,比如PHP编写的应用程序在高并发下响应速度缓慢,甚至会出现崩溃的情况。为了解决这些…

    2023年5月28日
    05
  • 如何在PHP中实现票务网站。

    随着旅游业的发展和人们休闲需求的增加,票务网站成为越来越受欢迎的在线购票平台。在这篇文章中,我们将介绍如何使用PHP编写一个票务网站。网站需求分析在开发任何网站前,都需要进行需求分析。首先,需要确定网站…

    2023年5月30日
    011
  • 如何处理PHP中的XML和JSON数据。

    在Web开发中,我们经常需要处理不同格式的数据,包括XML和JSON格式的数据。在PHP中,处理这些数据是一个常见的任务,因为PHP是一种非常流行的服务器端脚本语言,而XML和JSON都是常用的数据交换格式。在本文中,我们…

    2023年5月30日
    05
  • 聊聊php 切割字符串。

    在PHP中,字符串切割是一个常见的操作,它可以帮助我们将一个长字符串分割成多个子字符串,PHP提供了多种方法来实现字符串切割,其中最常用的是`explode()`和`str_split()`函数,下面我们详细介绍这两种方法的用法…

    2024年6月20日
    02
  • PHP常见数组排序方法小汇总

    1.简单数组排序 sort() 函数和rsort() 函数:语法规则:bool sort(array &array [,int sort_flags] bool rsort(array &array [.int_sort_flags]参数:第一个参数是排序数组对象第二个参数是可以选的 可选值…

    2022年6月25日
    0157
  • PHP的逻辑运算符

    说明:逻辑运算符也叫“短路运算符”, 认为写的只判断一边如果达成条件直接结束给结果 逻辑或:|| 当两边的操作数其中一边为真,结果就是真。 当两边的操作数都为假时,结果就是假。 当前左边的操作数为假时,才去右…

    2017年12月7日 PHP自学教程
    0203
  • PHP8函数:fdiv()的精度计算技巧。

    PHP8是目前最新的PHP语言版本,它引入了许多令人兴奋的新功能和改进。其中之一就是fdiv()函数,它可以用于准确地计算浮点数的除法运算。在以前的PHP版本中,使用基本的除法运算符(/)可能会导致精度问题。这是因为…

    2023年5月21日
    01
  • 如何用PHP实现微信公众号数据统计

    随着微信公众号逐渐成为企业营销的重要工具之一,对公众号数据的统计分析也变得越来越重要。通过数据分析,可以了解公众号的粉丝数量、活跃度、用户转化率等指标,从而优化运营策略和提高营销效果。本文将介绍如何…

    2023年5月18日
    05

联系我们

QQ:951076433

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