包含具有重复类的文件
Posted
技术标签:
【中文标题】包含具有重复类的文件【英文标题】:Include file with duplicate class 【发布时间】:2015-10-05 09:10:44 【问题描述】:我想包含一个文件,该文件包含我的应用程序中已存在的类。显然这会导致:
php Fatal error: Cannot redeclare class XYZ
由于我不会进入这里的原因,我无法更改相关文件的代码,也无法更改包含原始类的文件。出于这个原因,我不认为命名空间是一种选择——尽管我对这个概念有点陌生,所以我可能是错的。
有没有办法动态更改正在读取的文件的内容以即时更改类名声明? 我能否以某种方式销毁或取消包含已存在的重复类?我意识到这不太可能是干净的。欢迎任何关于解决方法的想法,无论多么丑陋。
【问题讨论】:
如果重命名类,调用者将不知道使用新名称。如果你销毁已经存在的副本,它的所有调用者会发生什么?这就是创建类命名空间来解决的问题。 我认为你不能取消声明。您可能需要创建一个namespace
。
@Barmar - 我认为这两件事都不是问题。我只需要访问类方法。如果需要,我可以重新加载原始类。
@Rasclatt - 我非常了解如何使用命名空间来完成这项工作。它是否需要在类声明本身中发生?如果是这样,那将无济于事,因为我无法修改包含的文件。如果没有,请告知。
sitepoint.com/php-53-namespaces-basics 有教程。你可以把你自己的类放在一个命名空间里,这样就不会和你不能修改的文件冲突了。
【参考方案1】:
我将根据 cmets 中提到的想法在这里回答我自己的问题。
$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);
简而言之:
将文件读取到变量中 替换类名 将变量写入临时文件 包含临时文件 删除临时文件工作就像一个魅力。
【讨论】:
以上是关于包含具有重复类的文件的主要内容,如果未能解决你的问题,请参考以下文章