2014-02-19 65 views
-1

什麼是最好的方式去定義一個PHP函數和該函數的調用,在一個字符串中,然後執行該代碼,即eval?我試圖從一個已定義的函數中獲取編碼的uri的長度並在字符串中調用。PHP的eval字符串作爲函數

$json_arr['my_function'] = "function hashfun1($enc_uri) { return strlen($enc_uri); } hashfun1($enc_uri);"; 
$hash_func = $json_arr['my_function']; 
$hash_val = eval($hash_func); 
print_r($hash_val); // should be length of encoded uri but displays "Parse error: syntax error, unexpected '%', expecting '&' or T_VARIABLE" 
exit; 

謝謝。

+2

我不明白你想用這個代碼來完成什麼。爲什麼你首先需要'eval()'? –

+0

這裏沒有解析錯誤。很多其他錯誤。 – AbraCadaver

+0

爲什麼首先,你是用'eval'來做的? – baldrs

回答

0

我想你想:

$json_arr['my_function'] = "function hashfun1($enc_uri) { return strlen($enc_uri); } hashfun1('" . $enc_uri . '");"; 

你錯過了填充$enc_uri

不要在生產代碼中這樣做,儘管它有效。 eval() is evil。你被警告了。

0

您需要在雙引號字符串中轉義「$」。並檢查退貨數量(第二爲評估):

$json_arr['my_function'] = "function hashfun1(\$enc_uri) { return strlen(\$enc_uri); } return hashfun1(\$enc_uri);"; 
+0

以及爲什麼使用eval?它破壞了操作碼緩存,在極少數情況下是合理的。如果您尋找動態函數生成,請檢查: (舊) http://php.net/create_function http://php.net/call_user_func_array (新) http://php.net/manual/ EN/functions.anonymous.php –

0

我想我需要使用call_user_func();這對我有效:$json_arr['my_function'] = function($enc_uri) { return strlen($enc_uri); }; $hash_val = call_user_func($json_arr['my_function'], $enc_uri); print_r($hash_val); exit;

感謝您的幫助球員。