2013-07-23 74 views
0

我有一些代碼返回到我的腳本的變量。我需要將它作爲PHP代碼執行,但使用eval函數時很緊張。這是在一個包含文件生成的代碼:替代PHP eval?

/include.php:

$preLoadFields .= '$2 = new KoolDatePicker("datepicker");          
        $2->id="field_2";        
        $2->scriptFolder = "/KoolPHP"; 

/main.php

eval($preLoadFields); 

即使當我嘗試運行使用eval它,我得到此錯誤:

解析錯誤:語法錯誤,意外的'2'(T_LNUMBER),期望變量(T_VARIABLE)或'$'

有沒有更好/更安全的方法來完成此任務?先謝謝你!

+0

生成的代碼來自哪裏? –

+0

生成的代碼來自包含文件中的腳本。如果在數據庫中啓用這些代碼(即,如果啓用了field1,則生成適當的代碼),該代碼實質上會生成字段。它只是一種類型的字段(日曆控件),我需要在HTML之前生成PHP代碼。 – Jason

+1

可能的重複[什麼是eval函數的替代?](http://stackoverflow.com/questions/10671602/whats-alternative-of-eval-function) –

回答

3

只是不要讓include.php在一個變量產生的PHP代碼。 但直接執行它。

$2 = new KoolDatePicker("datepicker");          
$2->id="field_2";        
$2->scriptFolder = "/KoolPHP"; 

如果您擔心HTML被生成並輸出到屏幕。 那麼就不要使用它ob_start​​ob_end_clean輸出:

ob_start(); 
$2 = new KoolDatePicker("datepicker");          
$2->id="field_2";        
$2->scriptFolder = "/KoolPHP"; 
$generated_html = ob_get_contents(); 
ob_end_clean(); 

任何一塊PHP會嘗試輸出到屏幕將被緩衝。 然後在您的代碼中使用$generated_html變量將其輸出到任意位置。

(您仍然需要修復無效的變量名稱)

+0

Duh - 不知道爲什麼我沒有想到這一點。這工作完美。感謝您的幫助!! – Jason

3

$2是不是一個有效的PHP變量名:http://www.php.net/manual/en/language.variables.basics.php

它必須以字母字符開頭。允許格式的正則表達式位於上面的鏈接頁面中。

在更大的計劃中,您不應該使用eval()。這是一個非常危險的功能。爲什麼不簡單地把它作爲PHP代碼和include()呢?

include.php:

<?php 
$var = new KoolDatePicker('datepicker'); 
$var->id="field_2" 
$var->scriptFolder = '/KoolPHP'; 

main.php:

<?php 
include('include.php'); 
+0

謝謝你的回覆! OK - 在變量名稱和eval獲得的錯誤上有意義。 PHP代碼是在包含文件中發生的其他事情之間動態生成的。所以這就是爲什麼我試圖把包含代碼的變量傳回主頁面...... – Jason