ホームページ  >  記事  >  バックエンド開発  >  php preg_replace_callbackコールバック関数のパラメータ受け渡し問題について

php preg_replace_callbackコールバック関数のパラメータ受け渡し問題について

藏色散人
藏色散人転載
2020-12-10 15:00:194523ブラウズ

推奨: "PHP ビデオ チュートリアル "

preg_replace_callback

この関数の機能は、正規表現検索を実行し、 callback Replace

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

パラメータの説明

  • pattern

検索対象のパターンは文字列または文字列配列です。

  • callback

置換が必要になるたびに呼び出されるコールバック関数。呼び出されたときに関数によって取得されるパラメータは、主題と結果。コールバック関数は、実際に置換に関与する文字列を返します。これはコールバック関数のシグネチャです:

  • handler ( array $matches ) : string

コールバック関数は多くの場合必要であり、 preg_replace_callback() ローカル呼び出しに使用されます。この場合、匿名関数を使用して、 preg_replace_callback() が呼び出されたときに匿名関数をコールバックとして定義できます。こうすることで、すべての呼び出し情報を同じ場所に保持し、他では使用されていないコールバック関数名で関数の名前空間を汚すことがなくなります。

例 #1 preg_replace_callback() と無名関数

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

検索対象の文字列または文字そして文字列配列を置き換えました。

  • limit

パターンごとの各件名文字列に使用できる置換の最大数。デフォルトは -1 (制限なし) です。

  • count

指定した場合、この変数には置換が実行された回数が設定されます。

パラメータを渡す方法

デフォルトでは、このコールバック関数は一致するパラメータ $matches のみを受け取ります。さらに多くのパラメータを渡したい場合は、迂回路を使用できます。 、ことわざにあるように、匿名関数で渡す必要があるパラメーターにアクセスできる限り、すべての道はローマに通じています。したがって、選択肢は 2 つあります。

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];
        }
   }
}

上記 2 つのメソッドを通じて、入力を渡したいコールバック関数を呼び出すことができますパラメーター。

まとめ

問題よりも解決策のほうが常に多いので、解決できない問題に出会っても、考え方を変えれば明るい未来が開けるかもしれません。

以上がphp preg_replace_callbackコールバック関数のパラメータ受け渡し問題についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は80shihua.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。