关于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中defined()函数的作用

    defined() 函数检查某常量是否存在。 若常量存在,则返回 true,否则返回 false。 语法:defined(name) 例子: <?php define("GREETING","Hello world!"); echo defined("GREETING"); ?> 结果输出:1

    2018年3月13日
    0205
  • 教你安装好的wamp5怎么开启gd库。

    在安装好的WAMP5中开启GD库的步骤如下: 你需要确保你的PHP版本支持GD库,GD库是PHP的一个扩展库,用于处理图形和图像,你可以通过查看phpinfo()函数的输出来确认你的PHP是否支持GD库,如果你看到GD库已经被启用,…

    2024年7月2日
    04
  • 详解PHP序列化和反序列化

    序列化序列化格式在PHP中,序列化用于存储或传递 PHP 的值的过程中,同时不丢失其类型和结构。序列化函数原型如下:string serialize ( mixed $value )先看下面的例子:class CC { public $data; private $pass; pu…

    2022年6月11日
    0169
  • 我来教你美国php虚拟主机购买怎么用。

    在互联网时代,网站已经成为企业和个人展示形象、传播信息的重要途径。为了更好地搭建和维护网站,越来越多的人选择购买海外php云虚拟主机。以下是购买和使用美国PHP虚拟主机的一些建议:,,1. **选择合适的虚拟主…

    2024年7月8日
    03
  • 直击php反射学习之不用new方法实例化类操作

    本文实例讲述了php反射学习之不用new方法实例化类操作。分享给大家供大家参考,具体如下:上一篇php反射入门示例简单介绍了 php 反射的几个常见类的使用方法,但是用反射能做些什么,你可能还是想象不到,下面我稍…

    2022年6月11日
    0128
  • PHP完善压缩处理类(支持主流的图像类型(jpg、png、gif)

    处理主流的图像类型(jpg、png、gif) Jpg -> imagecreatefromjpeg() Png->imagecreatefrompng() Gif->imagecreatrefromgif()   保存图像的时候: Png--->imagepng() Gif---->imagegif() Jpg--…

    2018年9月11日 PHP案例操作
    0335
  • 我来分享服务器搭建php环境。

    一、搭建PHP网站的基本步骤 1. 安装Web服务器:首先需要在Windows系统上安装一个Web服务器,如Apache或Nginx,这里以Apache为例,下载对应的安装包,解压到指定目录,然后配置环境变量。 2. 安装PHP:从官网下载对应…

    2024年6月18日
    01
  • PHP涉及的英语单词!

    PHP:PHP is HyperText Proprocessor hosts:hosts文件 DNS:Domain Name Server域名服务器 load:装载 Module:模块 LoadModule:装载模块 File:文件 Match:匹配 FilesMatch:文件匹配 AddType:添加类型 applic…

    2018年4月28日
    0639

联系我们

QQ:951076433

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