PHP:require_once和继承

JDe*_*age 2 php inheritance require-once

如果我有:

require_once("bla.php");
class controller{.....}
Run Code Online (Sandbox Code Playgroud)

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

如果require_onceclass controller定义中完成了怎么办?

谢谢!

JDelage

ste*_*esu 6

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

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

require_once("bla.php");
class controller{.....}
Run Code Online (Sandbox Code Playgroud)

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

require_once("controller.php");
class control_A extends controller{...}
Run Code Online (Sandbox Code Playgroud)

这是因为该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{...}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,只需要求controller.php,现在可以看到并解析控制器的必要定义.你不能做的是省略声明controller.这不仅仅是因为您bla.php在声明它时需要,而且还无法扩展尚未声明的类.所以下面的代码:

class control_A extends controller{...}
Run Code Online (Sandbox Code Playgroud)

因为控制器尚未定义,所以会给你一个错误.

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