【问题标题】:Is there a way to use strings in an array as the names of functions?有没有办法使用数组中的字符串作为函数的名称?
【发布时间】:2014-03-03 15:31:44
【问题描述】:

我想声明一系列函数并使用数组元素命名它们。我不想将函数作为匿名函数放入数组中,而是希望通过使用数组元素中的唯一名称直接调用它们来声明和访问它们。

我想要类似以下的东西,但它确实有效:

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

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

这些功能的目的是将子菜单页面添加到我的 wordpress 插件的管理页面。子菜单的数量及其名称取决于数据库中表中的记录。

也许有更好的方法可以完全做到这一点。请帮忙。当我尝试在数组中使用匿名函数并在 add_submenu 函数的函数参数中引用数组元素时,我在转到子菜单页面时不断遇到权限问题。

【问题讨论】:

  • 我试图以更清晰的方式提出这个问题。我不确定是否应该更改原始问题以使其更清楚或问另一个问题。如果我将最初的问题改为说我不想使用匿名函数,那么建议我使用匿名函数的回答会显得很愚蠢,我不希望这样,因为我真的很感谢任何帮助。
  • "do something" 来自哪里?数据库?
  • 我只是把它放在那里来代替函数所做的所有事情。即,它创建一个带有 5 个页面的选项卡式菜单,用于在数据库中的表中创建新记录、列出、查看、编辑和删除记录。我正在尝试为用户提供创建自己的表的能力,并让此代码为他们提供一个界面来创建、查看、列出、编辑和删除表中的记录。

标签: php arrays function wordpress


【解决方案1】:

你的函数的名字必须是一个常数。但是您仍然可以调用名称存储在数组中的函数。

如何调用具有动态名称的函数。

http://www.php.net/call_user_func_array

你也可以使用匿名函数,但这有点困难。

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

【讨论】:

  • 我认为我的问题是我无法按照您在 wordpress add_submenu 框架中的建议进行操作。 &lt;?php add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function ); ?&gt; 是调用函数的地方。
  • 我不是 wordpress 开发者,但您可能想检查 API 中 $function 参数的类型。如果它是可调用的,您可以使用匿名函数或包含函数名称的字符串。
  • 被描述为回调。我已经尝试了这两种想法并遇到了麻烦。当我使用匿名函数时,我得到You do not have sufficient permissions to access this page.,当我使用字符串时,我被告知该函数不存在或名称无效。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 2019-11-14
    • 2019-11-23
    • 2020-07-11
    相关资源
    最近更新 更多