나는 울기 시작할 준비가되었습니다. 필자는 php.net 매뉴얼 페이지를 읽고, 다양한 구문으로 12 건의 Google 검색을 시도했으며, 수백 개의 stackoverflow 스레드를 스캔했습니다. 나는이 방법을 사용하는 것을 보았지만, 그것은 단지 나를 위해 작동하지 않는다. 그것은 매우 기본적인 것처럼 보입니다. 몇 가지 관련 질문이나 문제가있어 답변을 찾는 방법을 모릅니다.eval()을 사용하여 기본 PHP 템플릿에 오류가 발생했습니다.
PHP 파일의 중요한 부분은 다음과 같습니다
<title>{$tpl['title']}</title>
내가 얼마나 깔끔한 좋아하고 코드가 청소 :
<meta name="description" content="{$tpl['description']}" />
nav, etc…
<div id="main-content"> {$tpl['page-content']} </div>
switch() {
…other cases…
default:
$tpl['title'] = "Newsletter Signup";
$tpl['description'] = "Newsletter description";
$tpl['page-content'] = file_get_contents('signup.html');
}
$tpl_src = addslashes(file_get_contents('index.tpl'));
eval("\$html = \"$tpl_src\";");
echo $html;
내 한편, index.tpl 파일을 다음과 같은 라인을 포함 , 여분의 무리없이 여분 <?=…?>
's.
먼저 중괄호 {}를 문자열에 표시하면 무엇이라고할까요? 내가 그것을 볼 수 있고 내가 아는 한 그들을 사용하는 법을 배울 수 있을지도 모른다.
다음은 전혀 작동하지 않습니다. 변수 키에서 작은 따옴표를 제거하면 좋지만 php.net은 내 이름이 어느 시점에서 언어 상수가되는 경우를 대비해서는 안된다고 말합니다. 공정하다. 하지만 어떻게 해결할 수 있습니까? evalTemplate 서브 루틴을 빌드하고 $ tpl을 전달할 수 있기 때문에 vars에 배열을 사용하는 것을 좋아합니다.
마지막으로, $ tpl [ 'page-content']가 출력되지 않습니다. 변수는 괜찮습니다. echo $tpl['page-content']
을 사용하여 테스트 할 수 있지만 최종 HTML에는 빈 줄 하나가 표시됩니다.
내가 아직 모르는 언어의 일부면이있을 것입니다. 어떤 도움을 많이 주시면 감사하겠습니다 !!
'eval ("\ $ html = \"$ tpl_src \ ";");'. 단지'eval'과 모든 복잡한 인용과 이스케이프를 생략해야합니다.이렇게하라 :'$ html = $ tpl_src;'정확히 같은 것을 평가한다. – Asaph
@Asaph - 'eval'이로드 된 문자열의 보간을 강제하는 데 필요하므로 작동하지 않습니다. –
@K 프라임; 오, 알았어. Meh. 나는 'eval'의 이런 사용 (그리고 대부분의 사용법)이 스타일 적으로 매력적이지 않다는 것을 알았습니다. ... – Asaph