2

如果我有:

require_once("bla.php");
class controller{.....}

如果我然后在不同的文件中创建class control_A extends controller{...},我需要再说一遍require_once("bla.php");,还是继承?

如果在定义require_once内完成class controller怎么办?

4

2 回答 2

7

到目前为止,我们有两个相互矛盾但同样正确的答案 =) 让我们看看我是否不能将两者结合成一个更具体的总答案。

如果任何类需要任何代码或定义bla.php,那么您将需要include("bla.php")在脚本的整个运行时中至少有一次。如果您以前的代码:

require_once("bla.php");
class controller{.....}

是在文件中,controller.php那么您可以control_A通过以下方式创建:

require_once("controller.php");
class control_A extends controller{...}

这是因为该require_once()函数本质上是将文件的内容复制并粘贴到该行的脚本中。因此,上面的内容将被视为等同于:

/* INSERTED FROM controller.php */
/* INSERTED FROM bla.php */
necessary definitions for controller
/* END bla.php */
class controller{.....}
/* END controller.php */
class control_A extends controller{...}

如您所见,只需通过 requires controller.php,即可看到和解析控制器的必要定义。你不能做的是省略controller. 这不仅是因为您bla.php在声明它时需要它,而且您不能扩展尚未声明的类。所以下面的代码:

class control_A extends controller{...}

由于尚未定义控制器,因此会给您一个错误。

然而,需要考虑的一件事——因为该类controller不扩展任何其他类,它不应该有任何外部依赖项。很有可能,bla.php在定义类之前必须运行的任何操作都是不必要的,或者可以重组。bla.php在定义之前您需要做什么controller

于 2010-10-11T15:13:05.270 回答
2

只要您包含继承的类,就不需要再次要求。

IE

类1.php:

require_once("tools.php");
class class1 {

}

类2.php:

require_once("class1.php");
class class2 extends class1 {

}
于 2010-10-11T15:03:56.290 回答