我最近遇到了一个php项目的问题,我终于意识到这是我编写类的方式。如果我尝试在页面中包含多个类,并且两个类共享同一个父类,则脚本失败。我现在已经解决了这个问题,但是想知道是否有人可以向我解释为什么我在做什么不起作用,因为我还没有完全了解它! 以下是不起作用的说明:
A级。
B级延伸A.
C级延伸A.
D类延伸B.
E级延伸C.
我需要D类和E类,脚本失败。如果C类没有继承A那么一切正常。 显然,这与要求A级两次有关,但有人可以用非常简单的术语解释它吗?!?!?
答案 0 :(得分:3)
你们每个班级都有自己的文件吗?
您使用的是require / include而不是require_once / include_once吗? include_once和require_once也不共享相同的包含文件表,所以你必须一致地使用一个。
或者在PHP5中始终使用__autoload函数。
答案 1 :(得分:3)
您可以只声明每个班级一次。如果您需要多次定义类的文件,解析器会遇到class A
,进行内部查找和保释:'嘿,您已经定义了该类'。最简单的解决方案是将每个类放入自己的文件中,并调用require_once
而不是require
。
答案 2 :(得分:2)
included文件中定义的任何函数或类都在全局范围内声明。这就是您可能遇到重新声明错误的原因。解决方案是使用require_once
或include_once
代替require
或include
。
最优雅的方法是使用__autoload
,但这需要PHP 5或更高版本。自动加载的唯一缺点是任何失败都是致命的错误,你无法自己处理。