상수를 이용한 다중 텍스트 치환
상수를 이용한 다중 텍스트 치환을 어디다 쓸 수 있는지 예를 들어보자면
다국어를 지원하는 환경에서 현재 설정된 언어셋이 무엇인지 모르겠지만 프로그램에선 상수화된 키워드를 사용하여 텍스트를 사용하는(e.g. UI 팝업, 시스템 로그 등) 경우 사용할 수 있다.
언어셋에 맞게 텍스트를 구성하는 게 아니라 모든 텍스트를 키워드로 구성해두고 상수를 프리셋으로 사용하면 가변적인 대응이 가능해진다.
그 밖에도 유연한 텍스트 구성에 사용할 수 있으니 참고하자.
소스코드
preg_match_all()를 사용하여 대상 텍스트 내에 { } 괄호로 둘러싸인 키워드와 동일한 이름을 사용하는 상수로 대체한다.
동일한 상수가 있다면 해당 값을 사용하고 const, define 모두 사용 가능하다.
단, { } 패턴을 사용했으나 키워드와 동일한 상수가 없다면 일반 텍스트로 출력한다.
<?php
const STR_MSG_1 = "다중 텍스트 치환자";
const STR_MSG_2 = "const 상수로 치환한다";
define("STR_MSG_3", "define 상수도 치환한다");
$text = "const상수 - {STR_MSG_1}\nconst상수 - {STR_MSG_2}\ndefine상수 - {STR_MSG_3}\n상수정의안됨 - {STR_MSG_4}";
preg_match_all("#\{(.*?)\}#", $text, $matches);
foreach( $matches[1] as $match ) {
if( @constant($match) ) {
$text = preg_replace("#\{{$match}\}#", constant($match), $text);
}
}
print($text);
?>
결과
STR_MSG_1, STR_MSG_2, STR_MSG_3의 키워드는 상수로 정의되어있어 치환이 되었으나 상수로 정의가 안된 STR_MSG_4는 일반 텍스트로 나오는 것을 확인할 수 있다.
const상수 - 다중 텍스트 치환자
const상수 - const 상수로 치환한다
define상수 - define 상수도 치환한다
상수정의안됨 - {STR_MSG_4}
끝.
'IT > web' 카테고리의 다른 글
[PHP] 멀티 프로세스 교착 관리 / semaphore, 세마포어, sem_get() (7) | 2022.01.21 |
---|---|
[PHP] 문자열 앞글자 삭제하기 예제, ltrim/substr 활용 (0) | 2022.01.12 |
[PHP] fileperms을 활용한 파일 탐색과 퍼미션 검사 (0) | 2022.01.06 |
[PHP] readdir을 활용한 파일 목록 읽기 예제, 파일 탐색기 (0) | 2022.01.06 |
[PHP] web shell 설명 및 예제 공유 (0) | 2022.01.06 |
댓글