2012-11-04 5 views
-2

예, 저는 Eval()이 얼마나 무서운 지, 선택의 여지가 없다는 것을 알고 있습니다. 과제를 위해 교수가 그것을 사용하도록 지시했습니다.Eval()을 통한 클래스 호출 멤버 함수

Eval()을 사용할 때 PHP가 클래스의 멤버 함수를 호출하지 못하게하는 이유를 알아 내는데 어려움을 겪고 있습니다. 예를 들어 :

f2f1 

을하고 페이지의 나머지 부분은 공백이됩니다 :

$code="class evalTest{ 
    function f1(){ 
     echo 'f1'; 
     f2(); 
    } 
    function f2(){ 
     echo 'f2'; 
    } 
} 

$x=new evalTest(); 
$x->f2(); 
$x->f1();"; 

eval($code); 
echo 'test'; 

위의 코드가 인쇄됩니다. Eval()을 통해 함수 내에서 함수를 호출하자마자 PHP 전체 스크립트가 멈춘 것처럼 보입니다. 심지어 마지막 "반향 테스트"; " 인쇄되지 않습니다.

이 기능을 사용하려면 약간의 트릭이 있습니까? 아니면 Eval()의 제한 사항입니까? 다시 말하지만, 가능하다면 Eval()을 사용하지 않을 것이지만, 특별히 사용하도록 지시 받았습니다.

+0

'는 error_reporting (E_ALL) '그 이유를 정확하게 알려줄 것입니다. 그렇게 말하면'eval'을 사용할 때마다 아프리카 어린이가 기아로 죽을 것입니다. –

+0

왜 downvote? 이 질문에 문제가 있습니까? – Starx

답변

2

f2() 대신 $this->f2();을 호출해야하기 때문에. 큰 따옴표 문자열의 모든 $blah변수 참조으로 해석되기 때문에

당신은 또한 당신이 따옴표를 사용하는 경우 $을 탈출해야합니다.

<?php 
$code="class evalTest{ 
    function f1(){ 
     echo 'f1'; 
     \$this->f2(); 
    } 
    function f2(){ 
     echo 'f2'; 
    } 
} 

\$x=new evalTest(); 
\$x->f2(); 
\$x->f1();"; 


eval($code); 
echo 'test'; 

Demo

0

사용 작은 따옴표 또는 \ $으로 보호, 또한 당신은 당신이 $ this-를 사용, F2를()가 호출 오류> F2했다 http://codepad.org/DkQ3PiTQ

$code='class evalTest{ 
    function f1(){ 
     echo "f1"; 
     $this->f2(); 
    } 
    function f2(){ 
     echo "f2"; 
    } 
} 

$x=new evalTest(); 
$x->f2(); 
$x->f1();;'; 

eval($code); 
echo 'test'; 
+0

작은 따옴표 -> 큰 따옴표는 중요하지 않습니다. –

+0

그는'$ x = new evalTest();'를 두 번 qoute와 함께 사용하면'= new evalTest();로 확장되어 첫 번째를 확인한 다음 tell() –

+0

한숨 ... 나는 내가 어리 석다는 것을 알았다. 고마워, 나는 분명히 이것을 잃어 버렸다. –