PHP:Require()和Class Hierarchies

时间:2010-11-19 04:38:24

标签: php oop class-design require

我正在考虑这个问题主要是一个C ++ / C#程序员,这可能有助于把事情放在眼里。我一直无法找到我的问题的简单答案,所以我很抱歉,如果那里有一个随时可用的。这似乎是一个非常普遍的问题。

假设我有 A类,它是 B类实例的容器。反过来, B类 C类实例的容器。通过容器,我的意思是每个类包含某些类型的对象的数组和一些描述这些对象的一般参数。每个类都存储在[className] .php

现在,我有一个需要构建类A实例的脚本。为了做到这一点,它需要构造类C的实例。每组都将用于构建类B的实例,最后,所有的B类都将用于构建A类实例。

问题是,在PHP中,放置require()语句的最佳(最不容易出错的)位置在哪里?一些想法:

  • require()脚本中的所有三个类,以及其他任何地方
  • require_once()您需要使用它们的所有类。在这种情况下,脚本中需要require_once()A,B和C,A中需要B和C,B中需要require_once()C。
  • require()只有层次结构中下一级别的类。脚本将要求(A),A将要求(B),B将要求(C)。因此,通过在脚本中要求A,您可以访问填充A。
  • 所需的所有类
  • 其他内容,例如自动加载。

一如既往,我很欣赏这些想法。虽然这在某种程度上可能是主观的,但我确实认为某些方式可能客观上比其他方式更好,而这正是我所追求的。

2 个答案:

答案 0 :(得分:2)

始终使用require_once来包含类。 始终。实际上没有任何缺点。通过require_once将文件包含在他们需要的每个文件中。这不会失败:您不能使用require_once太多次,并且保证在整个程序中包含该类并可用。

答案 1 :(得分:1)

我选择自动加载。如果你的课程自动为你require_once(),你不必担心。{您所要做的就是开始使用您期望的类,PHP将调用您的自动加载器以确保加载类。

如果您更习惯于在每个文件顶部导入内容的环境中进行编程,则可能更习惯在所有文件的顶部使用require_once()。我几乎更喜欢这种方式而不是自动加载,因为它非常清楚每个类的依赖关系。但是,你会得到许多你可能不喜欢的重复。

无论哪种方式都有效。它主要是一种风格选择。