繁体   English   中英

定义PHP函数名称时是否可以使用变量?

[英]Is it possible to user a variable when defining a PHP function's name?

我为我们的公司构建了一个CMS,该CMS具有大量功能,其中许多与特定功能相关,而使用CMS的大多数网站都未使用这些功能。 因此,我的目标是仅在需要时(在调用函数时)包括函数的脚本。

现在,我只是像往常一样简单地调用每个函数,要求该文件位于该函数的实际脚本所在的位置,然后再调用第二个函数(与该函数同名,但带有下划线前缀),其中包含实际的该功能的脚本。 例如:

function foo($a,$b) {
    require_once "funtions-foo.php";
    return _foo($a,$b);
}

但是,这对我来说似乎有点重复。 我正在寻找一种“捕获”函数调用的方法,如果其名称在“包含”函数的数组中,我将包括正确的文件并调用该函数。 例如:

catch_function_call($function,$arg1,$arg2) {
    $array = array(
        'foo' => 'functions-foo.php',
        'bar' => 'functions-bar.php'
    );
    if($array[$function]) {
        require_once $array[$function];
        return $function($arg1,$arg2);
    }
}

我假设'catch_function_call'函数可以在调用函数时以某种方式捕获。 但是据我所知,我的第二个想法是使用变量简单地定义每个“包含”的函数。 例如:

$array = array(
    'foo' => 'functions-foo.php',
    'bar' => 'functions-bar.php'
);
foreach($array as $function => $file) {
    function $function($arg1,$arg2) {
        $_function = "_".$function;
        require_once $file;
        return $_function($arg1,$arg2);

    }
}

当然,这给了我一个错误,因为在定义它时,我显然不能在函数名中使用变量。 关于如何解决此问题或其他仅在需要时包含函数的解决方案的想法?

您可以__callStatic在对象或类上使用__call__callStatic ,这将近似于您要寻找的功能。 您可以在该主题中阅读一些解释。

但是,在全局函数空间中无法做到这一点。

这可以帮助您吗: http : //php.net/manual/en/function.create-function.php 或者也许将设计转到OO并使用__call()

只需在每个需要的功能之前使用include_once

您是否考虑过将功能分组,并将其作为静态方法存储在对象中。 然后,您可以使用__autoload()函数,而不必担心何时添加。

所以:

class Rarely_Used{

  static function foo(){}
  static function bar(){}
}

class Only_for_Managers{
  static function ohboy(){}
  static function punish(){}
}

为什么包括所有文件是一个大问题? 由于您可能正在使用APC,因此重型文件系统访问将不是问题。 除此之外,如果有更多函数,则在函数哈希表中查找的速度显然会变慢,但是,这肯定不会成为应用程序的瓶颈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM