2013-04-04 120 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