2011-01-14 45 views
0

基本上,我想知道的是,對於create_function函數中的第二個參數,有無論如何傳遞一個沒有分號的字符串?或者它不起作用。PHP的create_function,函數沒有分號?

例如:

taken from php.net 
create_function('$a,$b', 'return "CRCs: " . crc32($a) . " , ".crc32(b);'), 

通知有字符串中分號。是否有任何可能的方式有人可以輸入一個沒有分號仍然會運行/評估的函數?

+0

爲什麼你需要那個? – 2011-01-14 04:41:24

+2

呃試試看。 – dqhendricks 2011-01-14 04:43:13

+0

你的意思是`crc32($ b)`? – 2011-01-14 04:50:41

回答

1

不,這是不可能的。 PHP是分號敏感的,你必須使用它來終止右括號前的每個語句。我甚至嘗試過這樣的常規功能:

function f() { 
    return 1 
} 

它發現了一個語法錯誤,與JavaScript不同。

0

在使用之前,您應該始終清理任何用戶輸入。 我建議你在用戶輸入中尋找分號,如果缺失,追加它。

如果用戶可以在這裏輸入任何內容,如果他輸入無效的函數名稱或只是垃圾,則仍然有問題。

您可以使用preg_match()進行驗證(雖然我不是preg的專家,所以我會讓其他人幫助您)。

-3

首先,你爲什麼需要這個?這是創建函數的一種非常骯髒的方式。希望是因爲你想創建一個界面,人們可以直接創建一個函數(這隻會對你有用,否則將會是一個很大的安全問題)。我真的不知道你想如何使用它。

無論如何,對於你的問題,你不必在乎它的工作與否。我的意思是,只要測試它是否正常工作,如果不是簡單地放一個分號。這只是對字符串的簡單測試。

2

使用create_function()創建匿名函數。第二個參數是一個字符串,它是函數的代碼(就像你寫的任何其他函數一樣)。例如:它不一定以分號結尾,例如:

$coolfunction = create_function('$thing', 'if ($thing > 0) {return "Yes"; } else { return "no!"; }'); 

echo $coolfunction(1) . ' and ' . $coolfunction(-1); 

結束於'}'並打印出來:是且不是!