我正在创建一个系统,可以从动态创建的php文件中调用相同的函数名称。
文件结构如下:
Caller.php从db读取数据并相应地调用mode {n}。有时候有机会在一个时间点调用多个规则。
caller.php示例{写在OOPS上}
foreach ($result as $row){
$mode = $rom->modeNum;
include 'rules/mode' . $mode . '.php';
call_fuction_inside_mode();
}
模式样本{n} .php {procedureural programming}
function call_fuction_inside_mode(){
//..Custom function depending upon mode{n}
}
这不会正常运行,因为caller.php会一次又一次地包含相同的函数名。
请注意:
proxy.php的工作方式如下
caller.php - > curl 127.0.0.1/proxy.php?mode={n} - >按定义调用
但是,在微服务器上处理每秒500次请求时,这不是一种有效的方法。我注意到许多请求被杀,订单号出现了问题。我的目标是以最少的内存使用率和100%利用提供的cpu资源来实现这一目标。
我很困惑,很好奇,找到我应该在这里处理的解决方案。
答案 0 :(得分:1)
在Mode.php中创建一个名为Mode
的接口:
interface Mode{
public static function AcivateMode();
}
并将Mode.php包含在您的代码中,然后更改mode{n}.php
中的代码,将您的函数封装到实现interface
模式的类中,如下所示:
class Mode1 implements Mode {
public static function AcivateMode() {
//..Custom function depending upon mode{n}
}
}
然后修改您的foreach
以激活以下模式:
foreach ($result as $row){
$mode = $rom->modeNum;
include 'rules/mode' . $mode . '.php';
call_user_func("Mode$mode::AcivateMode");
}
或强>
您可以使用命名空间方法,将命名空间添加到每个mode{n}.php
文件中,如下所示:
<强> mode1.php 强>
namespace Mode1;
function call_fuction_inside_mode(){....}
并使用以下方法调用该函数:
call_user_func("Mode$mode\call_fuction_inside_mode");
对我有用,希望它会有所帮助:)。
此致