포럼

빵조각 기능을 만들기 위해 만들게 되었는데 안타깝게도 기존의 생각대로 하면 3단, 4단 처럼 정해진 수만큼만 뽑아낼 수 있더군요. 물론 메뉴도 그렇구요. 그래서 함수를 재귀적으로 호출하게 된다면 ∞단(XE가 지원하는 최대 만큼)만큼 메뉴와 빵조각을 뽑아낼 수 있다고 생각해서 함수를 짜려고 했으나 !! 안타깝게도 XE 템플릿 문법에서는 {, }를 마음껏 표현할 수 없었습니다. (NHN 개발자들 기술력의 한계를 느끼며, 템플릿 문법 치환을 앞 뒤로 파악해 쪼여주는게 아니라 대충 분석해서 치환시키는 구조인게 문제, preg나 ereg 계열 정규식이 어떻게 동작하는지 대충 훑어봐도 어떻게 치환해줄지 감이 올텐데.. 안타까움)


그래서 우회적인 방법을 동원하였지요.


{@ $_traceRoot = create_function('', strtr('if(true) #[ return true; ]#', array('#[' => chr('123'), '#]' => chr('125')))); echo call_user_func($_traceRoot); }


대략 템플릿 문법에서 PHP 구문을 실행하기 위해서는 {@ ~~ } 으로 묶어주지요?

그러나 저 구문 안에서는 {, }를 쓰면 템플릿 문법이랑 충돌하는 탓에 에러가 뿜는 바람에

function() {}으로 노골적으로 함수를 선언할 수 없어서 우회적인 방법으로 PHP에 내장된 함수를 이용해

함수를 만들어서 반환해주는 create_function 함수를 사용해서 함수를 만들어냅니다.


물론 저 안에서도 if문이라던지 각종 구문에서 {, }가 필요한데 일부로 {를 #[으로 적고 }를 ]#으로 표기한 다음에

저 부분을 통째로 strtr 함수를 이용해서 #[을 {, #]을 }으로 각각 치환시키는데 여기서도 {, }을 직접 표기 못하니까

우회적인 방법으로 {, }의 아스키 코드인 123, 125를 chr 함수를 이용해 문자열로 바꾸어 주도록 표현했습니다.


그런데 가장 큰 문제점은 어이없게도 저렇게 만들어낸 함수를 직접 호출하면 선언되지 않은 함수라고 호출되지 않더군요.

그래서 call_user_func를 통해 변수에 담아둔 함수를 실행시키도록 했습니다.


(매번 짜면서 느끼는거지만 PHP에는 수 많은 유용한 함수가 있다는 것에 감탄)

글쓴이 제목 최종 글
데미갓 성능 향상을 위한 xe files/cache 폴더 생성 경로 변경? [1] 2020.03.14 by 데미갓
메테워 게시물이 1만개정도 넘는다면 [2] 2013.01.08 by 데미갓
Cody [요청사항] 구글 XE 프로젝트 들의 이슈 등록 및 처리에 대해 [7] 2020.03.14 by Garon
XE러버 1.5.4 업뎃 이후 [17] 2020.03.14 by XE러버
XE러버 1.5.4.1 업그레이드 이후 게시판설정을 바꾸거나 사이트맵을 수정할 경우 [3] 2013.01.07 by XE러버
CM(OEZ) [대박기능수정완료 1.8버전] SSL 사용중이시라면 필수 애드온 입니다! [5] file 2013.01.06 by CM(OEZ)
언벨리티 템플릿 문법 내에서 함수 만들고 호출하기. [5] 2013.01.06 by 언벨리티
반도체맨 FileHandler.class.php 수정 요청합니다. [3] 2013.01.06 by 언벨리티
바이더웨이 스크립트가 제대로 로딩되지 않아요 ㅠㅠ  
웹엔진 전에 구글 리비전에 등록된 쿼리 파서 적용 된건가요?  
우냠냠냠 그룹아이콘이 다 뭉개져버리네요  
XE러버 익명게시판에서 글 수정을 통해서 관리자가 카테고리를 바꾸면 [3] 2013.01.04 by CM(OEZ)
코불스 XE는 PHP 5.4에선 호환성이 떨어지나요? [4] 2013.01.04 by 코불스
XE팬 1.4 버전대의 사용률??  
대암지기 1.5.4 beta 언제 쯤 벗어 날까요? [15] 2013.01.03 by 똑디
자유로 1.4에서 1.5로 업데이트 후 관리자 메뉴에서 문제가 있네요. file  
Apollos2304 약간의 미스테리가? [3] 2020.03.14 by sanjock
우냠냠냠 관리자페이지에서 회원정보를 수정하면 가입일이 바뀝니다.  
우냠냠냠 1.7로올라가면요 [1] 2013.01.02 by 도라미
블랙비 ( var_idx 값은 필수 입니다 )라고 나오네요