【问题标题】:Use a variable to define a PHP function使用变量定义 PHP 函数
【发布时间】:2011-08-27 10:02:29
【问题描述】:

我想使用变量动态命名一些函数,如下所示:

$thing = 'some_function';

function $thing() {
    echo 'hi!';
}

我知道我可以使用这样的变量调用函数:

$something = 'function_exists';

if( $something('print_r') ) {
    echo 'Yep';
}

但上面的例子对我不起作用。

有什么想法吗?

我正在使用具有模块的系统。每个模块都是一个 php 脚本,可以从特定文件夹中添加或删除。

每个模块都需要一个新函数来初始化它。我正在查找文件名,然后我想循环并创建一系列函数,每个模块一个。

我正在使用现有系统,无法重写模块处理。

另一种方法是只写出所有的 init 函数并对其进行硬编码,但随着列表的增长,代码也会随之增长 - 如果模块被删除,则会引发错误。

【问题讨论】:

  • 你的第一个代码没问题。但在使用此功能之前,您应该三思而后行。然后决定不使用它。
  • 除非这没有用。您会看到,该功能始终是静态的-您不能以这种方式使功能有所不同。无论这个函数被命名为什么,这个函数无论如何都会以同样的方式运行。这就像制作hello() 函数一样,只是根据您喜欢用户的方式命名不同:P。对于这样的功能,您可能会使用$thing()访问,使其无用。正常命名函数即可。
  • 愿意评论我不应该这样做的原因吗?
  • @Mick:我对你的主要问题发表了评论。它显示了为什么不这样做的一些原因。

标签: php function variables


【解决方案1】:

你能做的是

$thing = 'some_function';
$$thing = function() {
   echo 'hi';
};
$some_function();

在 php create_function 而不是 anonymous function

// Use this in < 5.3
$thing = 'some_function';
$$thing = create_function('',
   'echo "hi";'
);
$some_function();

话虽如此,使用动态名称定义函数是个坏主意。相反,创建一个您调用的函数数组,或使用多态性。

【讨论】:

  • 我想支持
  • @Mick 不,create_function 与命名部分无关。在答案中添加了 php
  • 因为我不知道他们中的all会是什么。我已经使用了您的示例,这些示例效果很好。不会有数百个这样的函数,只有 10 个左右 - 但我无法完全控制这些名称将是什么。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-02
  • 2015-12-03
相关资源
最近更新 更多