包含重复的文件 class
Include file with duplicate class
我想包含一个文件,其中包含我的应用程序中已存在的 class。显然这会导致:
PHP Fatal error: Cannot redeclare class XYZ
由于我不会深入到这里的原因,我无法更改相关文件的代码,也无法更改包含原始 class 的文件的代码。出于这个原因,我 认为 命名空间不是一个选项 - 尽管我对这个概念有点陌生,所以我可能是错的。
- 有没有办法动态更改正在读取的文件的内容以即时更改 classname 声明?
- 我能否以某种方式销毁或取消包含已存在的副本class?
我意识到这不太可能是干净的。欢迎任何解决方法的想法,无论多么丑陋。
我将根据评论中提到的想法在这里回答我自己的问题。
$path = "/path/to/include/file.php";
$className = "OriginalClassname";
$tempClass = "ReplacementClassname";
$buffer = file_get_contents($file);
$buffer = str_replace($className,$tempClass,$buffer);
$file = 'temp.php';
file_put_contents($file, $buffer);
include_once($file);
unlink($file);
简而言之:
- 读取文件到变量
- 替换类名
- 将变量写入临时文件
- 包括临时文件
- 删除临时文件
工作得很好。
我想包含一个文件,其中包含我的应用程序中已存在的 class。显然这会导致:
PHP Fatal error: Cannot redeclare class XYZ
由于我不会深入到这里的原因,我无法更改相关文件的代码,也无法更改包含原始 class 的文件的代码。出于这个原因,我 认为 命名空间不是一个选项 - 尽管我对这个概念有点陌生,所以我可能是错的。
- 有没有办法动态更改正在读取的文件的内容以即时更改 classname 声明?
- 我能否以某种方式销毁或取消包含已存在的副本class?
我意识到这不太可能是干净的。欢迎任何解决方法的想法,无论多么丑陋。
我将根据评论中提到的想法在这里回答我自己的问题。
$path = "/path/to/include/file.php";
$className = "OriginalClassname";
$tempClass = "ReplacementClassname";
$buffer = file_get_contents($file);
$buffer = str_replace($className,$tempClass,$buffer);
$file = 'temp.php';
file_put_contents($file, $buffer);
include_once($file);
unlink($file);
简而言之:
- 读取文件到变量
- 替换类名
- 将变量写入临时文件
- 包括临时文件
- 删除临时文件
工作得很好。