포럼

빵조각 기능을 만들기 위해 만들게 되었는데 안타깝게도 기존의 생각대로 하면 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에는 수 많은 유용한 함수가 있다는 것에 감탄)

글쓴이 제목 최종 글
genosaid XE Official V3 Default 쓰시는 분 계신가요? [5] 2012.12.31 by 한닥터
라미아스튜디오 궁금해서 시작하는 설문조사, 모니터해상도 가로폭 1200이하로 쓰시는분, 아직도 계신가요? [16] 2013.01.01 by 라미아스튜디오
冠脫之夢 프로젝트XE 사용하시는 분들께 자문을... [5] file 2013.01.01 by 冠脫之夢
snows96 xe_v3_gallery 포인트 아이콘 표시 관련 문제 file  
블랙비 ( var_idx 값은 필수 입니다 )라고 나오네요  
우냠냠냠 1.7로올라가면요 [1] 2013.01.02 by 도라미
우냠냠냠 관리자페이지에서 회원정보를 수정하면 가입일이 바뀝니다.  
Apollos2304 약간의 미스테리가? [3] 2020.03.14 by sanjock
자유로 1.4에서 1.5로 업데이트 후 관리자 메뉴에서 문제가 있네요. file  
대암지기 1.5.4 beta 언제 쯤 벗어 날까요? [15] 2013.01.03 by 똑디
XE팬 1.4 버전대의 사용률??  
코불스 XE는 PHP 5.4에선 호환성이 떨어지나요? [4] 2013.01.04 by 코불스
XE러버 익명게시판에서 글 수정을 통해서 관리자가 카테고리를 바꾸면 [3] 2013.01.04 by CM(OEZ)
우냠냠냠 그룹아이콘이 다 뭉개져버리네요  
웹엔진 전에 구글 리비전에 등록된 쿼리 파서 적용 된건가요?  
바이더웨이 스크립트가 제대로 로딩되지 않아요 ㅠㅠ  
반도체맨 FileHandler.class.php 수정 요청합니다. [3] 2013.01.06 by 언벨리티
언벨리티 템플릿 문법 내에서 함수 만들고 호출하기. [5] 2013.01.06 by 언벨리티
CM(OEZ) [대박기능수정완료 1.8버전] SSL 사용중이시라면 필수 애드온 입니다! [5] file 2013.01.06 by CM(OEZ)
XE러버 1.5.4.1 업그레이드 이후 게시판설정을 바꾸거나 사이트맵을 수정할 경우 [3] 2013.01.07 by XE러버