所以我需要在我的项目中包含模块化代码/库,一个新库:
图书馆A :
a.php: class A;
图书馆B :(从A中检出v1.0)
b.php: include_once a.php; class B extends A;
图书馆C :(从A中检出v2.0)
c.php: include_once a.php; class C extends A;
图书馆D :
d.php: include_once b.php,c.php;
这显然会导致名称冲突(cannot redeclare A
)。
我无法触及任何一个库,因为它们经常从其他地方拉出来。另外,我需要将结果作为另一个库,因此嵌套的命名空间不是一个选项。但我想必须有很多其他项目同样的问题?感谢您的任何建议。
答案 0 :(得分:0)
您可以使用require_once或include_once代替include
。
这些可能会影响性能,因为必须使用内存和处理来跟踪包含的类并检查它,但这是最简单的解决方案。他们做了多少,取决于单页加载中包含/ require_once的数量。
更复杂的会实现类自动加载器,但你可能不想去那里......
编辑 -
如果我理解你的问题,这是一个依赖性问题。库B和C都引用A,但每个引用的是不同版本的A.如果是这种情况,解决方案并非易事:任何使用require_once或include_once都将导致未确定的第一个加载版本的A被使用。任何使用include都会导致类重复。我不认为你可以通过使用这些功能来解决问题。您需要做的是管理库依赖项。
例如,自动加载器可识别类库的多个版本并加载最新版本(假设您在各版本之间保持向后兼容性)。您还可以尝试使用嵌套类,以保持每个库的依赖关系孤立和自包含。
答案 1 :(得分:0)
如果每个版本的文件名不同,您可以检查是否已经声明了一个类。 例如:
if (!class_exists('A')) {
include a-XX.php;
}
请注意,这样您只能加载一个版本的类。
答案 2 :(得分:0)
如果我理解你的话
你的问题是那个
库B和C包含相同的文件,即A
你想要B和C在D中的另一个B和C具有相同的文件 这是A所以它显示
致命错误:无法在
中重新声明A类
好的--->
在文件 c.php , b.php 和 d.php include_once 'a.php'
; 或强>
require_once 'a.php'
;