2013-07-05 28 views
1

我想声明一个包含变量名的字符串,然后让PHP能够从字符串中识别该变量,就像一个javascript eval。示例:php从字符串中提取变量名,有点像javascript eval

此代码有效,因为$ value的值是字符串中的值,而不是“$ value”。

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

,但我想这样的功能:

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

当然,这并不在PHP中工作,因为$ str2的分配时,$ NEWVALUE并不存在。有没有办法让PHP做到这一点,能够从字符串获取变量名,然后获取该变量的值?这有点像我猜的javascript eval。谢谢阅读!

用法:我正在构建一个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"; 
} 

会产生类似

<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> 

我想这是在飞行中产生的,所以说我有一些所谓的makeCarForm方法,它接受一个字符串作为输入,因此可以说,

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;