>백엔드 개발 >PHP 튜토리얼 >php preg_replace_callback 콜백 함수의 매개변수 전달 문제에 대해

php preg_replace_callback 콜백 함수의 매개변수 전달 문제에 대해

藏色散人
藏色散人앞으로
2020-12-10 15:00:194632검색

추천: "PHP 비디오 튜토리얼"

preg_replace_callback

이 함수의 기능은 정규식 검색을 수행하고 교체를 위해 콜백을 사용하는 것입니다

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만 수신합니다. 더 많은 매개변수를 전달하려면 우회 전술을 사용할 수 있습니다. 익명 함수에 전달되어야 하는 매개변수에 액세스할 수만 있으면 됩니다. 따라서 우리에게는 두 가지 옵션이 있습니다.

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으로 문의하시기 바랍니다. 삭제