PHP에서 preg_replace_callback_array 함수는 일반 표현식 및 콜백 함수를 기반으로 텍스트를 처리 할 수있는 강력한 도구입니다. 이 기능을 영리하게 활용함으로써 변수와 로직을 HTML 템플릿에 쉽게 포함시키는 간단한 템플릿 엔진을 구현할 수 있습니다.
이 기사에서는 preg_replace_callback_array를 사용하여 간단한 템플릿 엔진을 구현하는 방법을 설명 하며이 기능을 사용하여 템플릿에서 자리 표시자를 교체하는 방법을 보여줍니다.
preg_replace_callback_array 는 PHP의 함수로 정규식 기반 교체 작업을 수행하고 각 일치하는 정규 표현식에 대해 콜백 함수를 지정할 수 있습니다. 콜백 함수는 일치하는 컨텐츠에 따라 사용자 정의 할 수 있으며 최종 교체 결과를 반환 할 수 있습니다.
기능 프로토 타입은 다음과 같습니다.
preg_replace_callback_array(array $patterns_and_callbacks, string $subject);
$ patterns_and_callbacks : 키가 일반 표현식이고 값이 콜백 함수 인 배열.
$ 제목 : 처리 할 문자열.
템플릿의 변수를 대체하고 간단한 조건부 로직을 지원하는 간단한 템플릿 엔진을 만들 것입니다. preg_replace_callback_array를 사용하면이 기능을 쉽게 구현할 수 있습니다.
템플릿의 자리 표시자가 {{}} 에 싸여있는 간단한 HTML 템플릿이 있다고 가정합니다.
$template = "<h1>환영,{{name}}!</h1><p>{{message}}</p>";
$variables = [
'name' => '장 산',
'message' => '다음은 간단한 템플릿 엔진 예제입니다。',
];
우리는 preg_replace_callback_array를 사용하여 자리 표시 자 교체 규칙을 정의합니다. 우리는 두 가지 주요 작업을 처리해야합니다.
변수 (예 : {{name}} )를 실제 값으로 바꾸십시오.
조건에 따라 다른 컨텐츠 표시와 같은 사용자 정의 로직을 처리합니다.
이러한 기능을 구현하려면 적절한 정규 표현식을 구성하고 각 정규 표현식에 대한 콜백 함수를 지정해야합니다.
다음은 템플릿 엔진을 구현하는 PHP 코드입니다.
<?php
$template = "<h1>환영,{{name}}!</h1><p>{{message}}</p>";
$variables = [
'name' => '장 산',
'message' => '다음은 간단한 템플릿 엔진 예제입니다。',
];
// 사용 preg_replace_callback_array 템플릿 엔진을 구현하십시오
$patterns_and_callbacks = [
'/{{(.*?)}}/' => function ($matches) use ($variables) {
$key = $matches[1];
return isset($variables[$key]) ? $variables[$key] : '';
},
];
$output = preg_replace_callback_array($patterns_and_callbacks, $template);
echo $output;
$ patterns_and_callbacks 배열은 템플릿의 자리 표시 자와 일치하는 정규 표현식 / (예 : {{name}} )와 일치합니다.
일치하는 각 자리 표시 자에 대해 콜백 함수를 통해 $ 변수 배열의 실제 값으로 교체합니다. 해당 변수를 찾을 수없는 경우 콜백 함수는 빈 문자열을 반환합니다.
템플릿 엔진을 더 강력하게 만들기 위해 특정 조건에 따라 특정 컨텐츠를 표시할지 여부를 결정하는 것과 같은 조건부 명세서에 대한 지원을 추가 할 수 있습니다. 이 함수를 구현하기 위해 {{if 조건}} 과 유사한 구문을 사용할 수 있습니다.
다음은 템플릿에서 간단한 조건부 판단을 사용하는 방법을 보여주는 예입니다.
<?php
$template = "<h1>환영,{{name}}!</h1>{{if show_message}}<p>{{message}}</p>{{endif}}";
$variables = [
'name' => '장 산',
'message' => '다음은 간단한 템플릿 엔진 예제입니다。',
'show_message' => true, // 메시지 표시 여부를 제어합니다
];
// 사용 preg_replace_callback_array 템플릿 엔진을 구현하십시오
$patterns_and_callbacks = [
'/{{(.*?)}}/' => function ($matches) use ($variables) {
$key = $matches[1];
return isset($variables[$key]) ? $variables[$key] : '';
},
'/{{if (.*?)}}(.*?){{endif}}/s' => function ($matches) use ($variables) {
$condition = $matches[1];
$content = $matches[2];
// 조건과 판사를 분석하십시오
if (isset($variables[$condition]) && $variables[$condition]) {
return $content;
}
return '';
},
];
$output = preg_replace_callback_array($patterns_and_callbacks, $template);
echo $output;
새로운 정규 표현식 /{{if (.*?)}} (.*?) {{endif}} /s는 조건 문과 일치하도록 추가됩니다.
콜백 함수는 {{if 조건}} 의 조건이 true인지 확인합니다. true 인 경우 {{message}} 이 표시됩니다. 거짓이라면 아무것도 표시되지 않습니다.
preg_replace_callback_array를 통해 템플릿에서 가변 교체 및 조건부 판단을 처리하는 매우 간단한 템플릿 엔진을 구현할 수 있습니다. 이 엔진은 매우 기본적이지만 정규 표현식 및 콜백 기능을 사용하여 템플릿 엔진의 핵심 기능을 구현하는 방법을 보여줍니다. 루프, 필터, 매크로 정의 등과 같이이 기준으로보다 복잡한 기능을 확장하고보다 강력한 템플릿 엔진을 구축 할 수 있습니다.