2013-04-04 122 views
1

好的,所以我想知道是否有任何(其他,并且最好是简单的)将字符串转换为变量的方法。将字符串转换为变量

我的代码,它的工作原理,如下所示:

echo eval('return $'. $date . ';'); 

$ date包含一个字符串。现在,代码工作,和我很好离开它,因为它是,如果没有别的,因为$日期是从预先编程类声明呼吁:

Time::Format($id = 'id', $name = 'name', $date = 'date->format(Y)'); 

我想问的原因是由于PHP官方免责声明/警告其使用:eval()语言结构非常危险,因为它允许执行任意PHP代码。因此不鼓励它的使用。如果您已经仔细核实没有其他选择而不是使用此构造,请特别注意不要将任何用户提供的数据传递给它,而不事先进行适当的验证。因此,我认为使用它是安全的,因为没有任何用户输入的数据被PHP评估,它是我设置的编码器的字符串,但是我想第二个意见是它的使用,以及另一个简单的方法来做到这一点(因为如果我能避免它,我宁愿不使用一个复杂的和可能长的代码块来完成简单的事情(只要它是安全的快速和肮脏的)

回答

7

PHP的变量变数将帮助你在这里您可以与其他美元符号作为变量的前缀使用它们:。

$foo = "Hello, world!"; 
$bar = "foo"; 
echo $$bar; // outputs "Hello, world!" 
+0

好了,不工作输出(在我的EXA mple)“date-> format(Y)”,它无法将字符串转换为变量,并执行eval对它做的事情(并允许它作为变量执行)。由于使用了eval,当我将$ date的eval作为变量回显时,它会回显用户输入的年份(因为它是硬编码的)。虽然PHP的变量变量有趣,但并不能完全回答我的问题。 – 2013-04-04 23:21:28

+0

而不是将字符串转换为变量,为什么不将字符串存储在变量中,然后根据需要调用它? – 2013-04-04 23:22:56

+0

据我所见,让它工作的唯一方法是将字符串转换为变量,因为字符串必须是一个变量才能工作。日期 - >格式(Y)不会做任何事情,但$ date-> format(Y)起作用。 – 2013-04-04 23:31:25