2014-03-03 27 views
0

我想聲明一系列函數並使用數組的元素對它們進行命名。我不想將這些函數作爲匿名函數放入數組中,而是希望它們可以通過從數組元素中直接調用它們的唯一名稱進行聲明和訪問。有沒有一種方法可以將數組中的字符串用作函數的名稱?

我想是這樣的,但之後實際工作:

for ($i=0;$i<count($tables);$i++) { 

function $tables[$i][form]() { 
} 
// do something; 
} 

這些功能的目的是爲了在子菜單頁添加到我的WordPress插件的管理頁面。子菜單的數量及其名稱取決於數據庫中的表中的記錄。

也許還有更好的方法來完成這個工作。請幫忙。當我嘗試在數組中使用匿名函數並引用add_submenu函數中的函數參數中的數組元素時,我在進入子菜單頁時不斷遇到權限問題。

+0

我想要問的問題在更明確的方式。我不確定是否應該改變原來的問題,以便更清楚地說明問題或詢問另一問題。如果我改變了原來的問題,說我不想使用匿名函數,那麼提示我使用匿名函數的回覆會顯得很愚蠢,而我並不想這麼做,因爲我真的很感謝任何幫助。 – Mark

+0

''做些什麼''從哪裏來?數據庫? – AbraCadaver

+0

我只是把它放在那裏,而不是函數所做的所有事情。也就是說,它創建一個帶有5頁的標籤式菜單,以在數據庫中的表中創建新的,列表,查看,編輯和刪除記錄。我試圖爲用戶提供創建自己的表的能力,然後爲這些代碼提供一個接口來創建,查看,列出,編輯和刪除表中的記錄。 – Mark

回答

0

eval函數是我一直在尋找的解決方案:

for ($i=0;$i<count($tables);$i++) { 
    $a[] = $tables[$i][form]; 
    }  

// Loop through the names of the submenu pages creating the required functions 

foreach ($a as $functionname) 

eval('function '.$functionname.'() { 
// All the function code goes here 
}'); 

我發現,試圖引用變量尤其是當不逃避和退出PHP的正確是造成我的大部分問題。

感謝Barmar指着我PHP: define functions with variable names

0

函數的名稱必須是常量。但是你仍然可以調用一個名字存儲在數組中的函數。

如何用動態名稱調用函數。

http://www.php.net/call_user_func_array

你也可以使用匿名函數,但是這是比較難一點。

http://www.php.net/manual/en/functions.anonymous.php

+0

我認爲我的問題是我在做wordpress add_submenu框架中的建議時遇到了麻煩。 '<?php add_submenu_page($ parent_slug,$ page_title,$ menu_title,$ capability,$ menu_slug,$ function); ?>是函數被調用的地方。 – Mark

+0

我沒有WordPress的開發,但你可能想檢查什麼類型的$函數參數的API。如果它是可調用的,則可以使用匿名函數或包含函數名稱的字符串。 – ToBe

+0

它被描述爲一個回調。我已經嘗試了這兩種想法並遇到麻煩。當我使用匿名函數時,我得到'你沒有足夠的權限來訪問這個頁面。'當我使用字符串時,我被告知函數不存在或者名稱無效。 – Mark

相關問題