[英]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.