如何在php文件中包含两个具有相同名称的函数?
我有两个文件:
file1.php包含
function getResidentCount() {}
function getResidentData() {}
file2.php还包括
function getResidentCount() {}
function getResidentData() {}
我需要file3.php来包含所有这些函数,因为每个函数都用于计算不同的常驻计数和数据。
知道如何将这两个文件都包含在一个文件中。我无法更改原始文件(它们正在制作实时应用程序)。
谢谢, 克劳迪亚
答案 0 :(得分:4)
这是邪恶的。我只提供它作为练习。
include('file1.php');
//include('file2.php');
$php=file_get_contents("file2.php");
$php=str_replace('getResidentCount', 'file2GetResidentCount', $php);
$php=str_replace('getResidentData', 'file2GetResidentData', $php);
eval($php);
现在您可以使用其他名称调用复制函数!
不要这样做。这只是一个想法:)
另一种方法是使用APD extension,它允许您重命名功能。包含第一个文件,使用rename_function重命名其功能,然后包含第二个文件。
真的,你应该深呼吸,延迟你正在做的事情,并重构你所拥有的。从中学习并改变你的做法,以免再次发生。 Namespaces可能会对您有所帮助,也可能采用更加面向对象的方法。
答案 1 :(得分:1)
不可能按原样包含这两个文件。这样做会导致PHP Fatal error: Cannot redeclare ...
。
Paul Dixon 提供了一个解决方法,如果您无法清理您的代码。
答案 2 :(得分:1)
如果您只需要在每次运行脚本时使用其中一个函数,那么您可以使用条件包含:
if (some_condition) {
require_once 'file1.php';
} else {
require_once 'file2.php';
}
答案 3 :(得分:0)
我最终为我需要两套这些功能的页面嵌套我的函数。感谢大家的帮助。
答案 4 :(得分:0)
寻找类似答案的解决方案,我惊讶地发现没人提到anonymous function。
file1.php
$myfunction=function($val){
//do something with val
);
file2.php
$myfunction=function($val){
//do something with val
);
file3.php
for($i=1;$i<3;++$i){
include_once('file'.$i.'.php');
$result[$i]=$myfunction($val);
}
该解决方案的唯一缺点是$myfunction
被覆盖,因此不可重用。
但这也许可以通过clone
解决(未经测试):
$allfunctions=[];
for($i=1;$i<3;++$i){
include_once('file'.$i.'.php');
$allfunctions[$i]=clone $myfunction();
}