2013-07-05 1 views
1

변수 이름을 포함하는 문자열을 선언하고 php에서 해당 변수를 자바 스크립트 평가와 같이 식별 할 수있게하고 싶습니다. 예 :php는 문자열에서 변수 이름을 추출합니다. javascript eval과 비슷합니다.

$ 값의 값이 "$ 값"이 아닌 문자열에서 끝나는 코드이므로이 코드가 작동합니다.

$value="some value"; 
$str="the value is $value"; 
echo $str; 
//the value is some value 

하지만 난이 기능 싶습니다 : $ str2가 할당 될 때 $ NEWVALUE이 존재하지 않았기 때문에

$str2="the new value is $newValue"; 
$newValue="something new"; 
echo $str2; 
//the new value is something new 

은 물론이 PHP에서 작동하지 않습니다. 어쨌든 php가 문자열에서 변수 이름을 가져올 수 있도록이 작업을 수행 한 다음 해당 변수의 값을 가져 옵니까? 그것은 자바 스크립트 평가와 비슷합니다. 읽어 주셔서 감사합니다!

사용법 : 나는 foreach 루프 내부에 html 블록을 구성 중입니다. 배열을 통해 반복되므로 루프 내부의 정보는 각 배열 요소의 키와 값입니다. 사용자가 입력 블록의 요소를 지정할 수 있도록 양식 객체에 대한 메서드를 작성했습니다. 이러한 요소 중 일부는 키에 대한 액세스를 원하고 일부는 값에 대한 액세스를 원합니다. 그래서 예를 들어

foreach($cars as $key=>$car) 
{ 
echo "<input id='text$key' type='text' value='".$car["model"]."'><br> 
\n<input value='choice$key' type='button' value='".$car["make"]."'> 
<br><br>\n\n"; 
} 

그렇게 말할 수, 나는이 즉시 생성 할, 그래서 문자열을 입력 makeCarForm라는 몇 가지 방법을 가지고 있다고

<input id="text0" type="text" value="Malibu"><br> 
<input id="choice0" type="button" value="Chevy"><br><br> 

<input id="text1" type="text" value="Escort"><br> 
<input id="choice1" type="button" value="Ford"><br><br> 

같은 것을 얻을 것이다

function makeCarForm($formString) 
{ 
foreach($cars as $key=>$car) 
{ 
echo $formString; 
} 
} 

다음 내 문자열

$theFormString="<input id='text$key' type='text' value='".$car["model"]."'><br> 
\n<input value='choice$key' type='button' value='".$car["make"]."'> 
<br><br>\n\n"; 

그래서 나는

makeCarForm($theFormString); 

같은 함수를 호출 할 수 있으며 위와 같은 HTML 출력을 얻을 것입니다. 이게 말이 돼? 내가 잘못된 방향으로가는거야?

+0

문자열을 재 조립하기가 쉽지 않습니까? ['sprintf()'] (http://php.net/sprintf) – BlitZ

+0

유스 케이스 란 무엇입니까? 아니요, 보간 표현식의 문자열 결과가 있으면 이전 상태 또는 변수 이름을 가져올 수 없습니다. 대신 printf 스타일의 자리 표시 자 체계를 사용하십시오. 또는 하위 문자열 검색, 또는 무엇을 묻고 있나. – mario

+0

유스 케이스를 추가했습니다. – chiliNUT

답변

2

eval을 사용하지 않는 것이 좋습니다. 과거에는 동적 부울 로직을 구축해야만하는 상황에서만 eval을 사용했습니다. 그것을 사용해야하는 경우 아래 지시 사항을 따르십시오.

$string = '$val = "FooBar"; $out = "This is my string $val";'; //when a variable is placed inside single quotes it will not expand. 
eval($string); 
echo $out; 

다시 한번 eval의 사용은 권장되지 않습니다. 이것은 순수한 교육 목적을위한 것입니다.

+0

이 작업은 필자가 필요로하는 작업이지만, eval이 가장 안전한 방법은 아닙니다. . – chiliNUT

2

변수의 선언에 관한 한, 아니오. 그러나이 디자인을 유지하려면 기능을 사용하는 것이 좋습니다.

$str2="the new value is ".newValue(); 
function newValue() 
{ 
    return 'something new'; 
} 

echo $str2; 
관련 문제