PHP:require_once 和继承
Posted
技术标签:
【中文标题】PHP:require_once 和继承【英文标题】:PHP: require_once and inheritance 【发布时间】:2011-04-23 20:53:45 【问题描述】:如果我有:
require_once("bla.php");
class controller.....
如果我随后在另一个文件中创建class control_A extends controller...
,我需要再次说require_once("bla.php");
,还是继承?
如果require_once
在class controller
定义内完成会怎样?
【问题讨论】:
这取决于bla.php
做什么?
【参考方案1】:
到目前为止,我们有两个相互矛盾但同样正确的答案 =) 让我们看看我是否不能将两者结合成一个更具体的总答案。
如果任何类需要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...
如您所见,只需要求controller.php
,控制器的必要定义现在就可以看到和解析。你可以不做的是省略controller
的声明。这不仅仅是因为您在声明它时需要bla.php
,而且您不能扩展尚未声明的类。所以下面的代码:
class control_A extends controller...
由于控制器尚未定义,因此会给您一个错误。
然而,需要考虑的一件事是——因为类controller
不扩展任何其他类,它不应该有任何外部依赖项。很有可能您在bla.php
中所做的任何必须在定义类之前运行的操作要么是不必要的,要么是可以重组的。 bla.php
在定义controller
之前需要做什么?
【讨论】:
【参考方案2】:只要包含了继承的类,就不需要再要求了。
即
class1.php:
require_once("tools.php");
class class1
class2.php:
require_once("class1.php");
class class2 extends class1
【讨论】:
以上是关于PHP:require_once 和继承的主要内容,如果未能解决你的问题,请参考以下文章