首頁  >  文章  >  後端開發  >  關於php preg_replace_callback回呼函數傳參問題

關於php preg_replace_callback回呼函數傳參問題

藏色散人
藏色散人轉載
2020-12-10 15:00:194605瀏覽

推薦:《PHP影片教學

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&#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

對於每個模式用於每個 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回呼函數傳參問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:80shihua.com。如有侵權,請聯絡admin@php.cn刪除