/** 클래스명 Smarty는 커스텀 템플릿 엔진입니다 이 클래스 객체를 통해 템플릿 파일을 로딩하고 파싱하고, 파싱된 결과를 출력합니다 */ class Smarty { public $template_dir = 'templates' //정의 템플릿 파일이 저장되는 디렉터리 public $compile_dir = 'templates_c'; //템플릿 엔진에 의해 파일이 결합된 후 저장되는 디렉터리를 정의합니다. public $ left_delimiter = '<{ 🎜> private $tpl_vars = array(); ’ s ‐ ‐ ‐ ‐ ‐ 🎜>함수 할당($ tpl_var, $value = null) { if ($tpl_var != '') ] = $값; }
>/* 지정된 디렉터리에서 템플릿 파일을 검색합니다*/ $tplFile = $this->template_dir.'/'.$fileName; 죽어(" 템플릿 파일 {$tplFile}이 존재하지 않습니다!"); } /* 결합된 템플릿 파일을 가져옵니다. 이 파일의 내용은 대체되었습니다*/ $comFileName = $ this-> ;compile_dir."/com_".$fileName.'.php'; /* 대체된 파일이 존재하는지 확인하거나, 존재했지만 변경된 경우 다시 만들어야 합니다*/ if(!file_exists($comFileName) || filemtime($comFileName) < filemtime($tplFile)) { /* 내부 교체 템플릿 메서드 호출*/ $repContent = $this->tpl_replace(file_get_contents($tplFile)); /* 시스템에서 결합한 스크립트 파일 저장*/ file_put_contents($comFileName, $repContent); } /* 클라이언트로 출력되는 처리된 템플릿 파일을 포함합니다*/ include($comFileName); }
비공개 함수 tpl_replace($content) { /* 왼쪽 및 오른쪽 구분 기호 사이의 규칙성에 영향을 미치는 특수 기호를 이스케이프합니다. 예를 들어 <{ }> ;Escape<{ }> $left = preg_quote($this->left_delimiter, '/'); $right = preg_quote($this->right_delimiter, '/');/* 템플릿의 다양한 식별자와 일치하는 정규식의 패턴 배열*/$ 패턴 = array( /* 템플릿의 변수 일치(예: , "<{ $var }>" */'/'.$left.'s*$([a-zA-Z_x7f-xff][a-zA-Z0- 9_x7f-xff]*)s*'.$right.'/i',
/* elseif 문자열 교체 */ ' $this->stripvtags('',"")', /* else */ '', /* 다음 두 항목이 사용됩니다. 루프 교체 foreach 형식의 템플릿 식별자 */ 'tpl_vars["${1}"] as $this->tpl_vars[ "$ {2}"]) { ?>${3}', 'tpl_vars["${1}"] as $this->tpl_vars["${2}"] => $this->tpl_vars["${3}"]) { ?>${4}', /*포함 문자열 바꾸기 */ 'file_get_contents($this->template_dir."/${1}")'
);
/* 일반 교체 기능을 사용하여 처리 */ $repContent = preg_replace($pattern, $replacement, $content);
/* 교체할 식별자가 아직 남아 있으면 재귀적으로 자신을 호출하여 다시 교체합니다.*/ if(preg_match('/ '.$ 왼쪽.'([^('.$right.')]{1,})'.$right.'/', $repContent)) { $repContent = $ this->tpl_replace($repContent);
} /* 대체된 문자열 반환 */ return $repContent;
}
/** 조건문에 사용된 변수를 해당 값으로 대체하기 위해 내부적으로 사용되는 전용 메소드 @paramstring$ expr은 템플릿에서 조건문의 시작 태그를 제공합니다. @returnstrin의 끝 태그는 조건문 및 반환 */개인 함수 Stripvtags($ expr, $statement='') { /* 변수의 정규 일치*/ $var_pattern = '/s*$([a-zA-Z_x7f -xff][a-zA-Z0-9_x7f-xff]*)s*/is'; /* 변수를 값으로 바꾸기*/ $ expr = preg_replace($var_pattern, '$this->tpl_vars["${1}"]', $expr); /* 시작 태그에서 따옴표를 이스케이프하고 바꿉니다*/ $expr = str_replace("\"", """, $expr); /* 명령문 본문 및 닫는 태그에서 따옴표 바꾸기*/ $statement = str_replace("\"", """, $statement); /* 처리된 조건문을 연결한 후 반환*/ $expr.$statement를 반환합니다.
}}
저작권 표시: 이 글은 원문입니다. 블로거의 글은 블로거의 허락 없이 복제할 수 없습니다.
위에서는 내용의 측면을 포함하여 PHP 정규 표현식을 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.