【问题标题】:Is it possible to user a variable when defining a PHP function's name?定义 PHP 函数的名称时是否可以使用变量?
【发布时间】:2010-11-09 19:14:11
【问题描述】:

我为我们公司构建了一个 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);

    }
}

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

【问题讨论】:

    标签: php function variables


    【解决方案1】:

    您可以分别在对象或类上使用__call__callStatic,这将接近您正在寻找的功能。你可以在this thread阅读一些解释。

    但是在全局函数空间中没有办法做到这一点。

    【讨论】:

    • 这听起来可能是最好的解决方案,但似乎需要重写所有函数调用,这可能比它的价值更多。不过,很高兴知道这一点,以供未来发展。
    【解决方案2】:

    这可以帮助:http://php.net/manual/en/function.create-function.php 吗? 或者也许将设计转为面向对象并使用__call()

    【讨论】:

      【解决方案3】:

      在每个需要的函数之前使用include_once

      【讨论】:

        【解决方案4】:

        您是否考虑过将您的函数分组到集合中并将它们作为静态方法存储在对象中。然后你就可以使用 __autoload() 函数,不用担心什么时候包含了。

        所以:

        class Rarely_Used{
        
          static function foo(){}
          static function bar(){}
        }
        
        class Only_for_Managers{
          static function ohboy(){}
          static function punish(){}
        }
        

        【讨论】:

        • 我也喜欢这个想法,但同样需要更改所有函数调用,这比我现在认为的价值要多一些。
        【解决方案5】:

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

        【讨论】:

        • 我正在尝试减少系统中的内存使用量。我们建立的一些网站流量非常大,从我们的角度来看,我们可以采取任何措施来减少内存消耗。
        猜你喜欢
        • 1970-01-01
        • 2012-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多