如果我有:
<?php
require_once("bla.php");
class controller{.....}
php>
如果我在另一个文件class control_A extends controller{...}
中创建,是否需要再次说require_once("bla.php");
,还是继承?
如果在require_once
定义中完成了class controller
该怎么办?
谢谢!
JDelage
答案 0 :(得分:6)
到目前为止,我们有两个相互矛盾,但同样正确的答案=)让我们看看我是否不能将两者结合成一个更具体的总答案。
如果任何类需要bla.php
中的任何代码或定义,那么您需要在脚本的整个运行时至少一次include("bla.php")
。如果你以前的代码:
<?php
require_once("bla.php");
class controller{.....}
php>
位于文件controller.php
中,然后您可以通过以下方式创建control_A
:
<?php
require_once("controller.php");
class control_A extends controller{...}
?>
这是因为require_once()
函数实际上将文件的内容复制并粘贴到该行的脚本中。因此,上述内容将与此相同:
<?php
/* 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
,而且还无法扩展尚未声明的类。所以下面的代码:
<?php
class control_A extends controller{...}
?>
由于尚未定义控制器,会给您一个错误。
但有一点需要考虑 - 因为类controller
没有扩展任何其他类,所以它不应该有任何外部依赖。在bla.php
中你所做的任何事情都很有可能在定义类之前必须运行,或者是不必要的,或者可以重组。在定义bla.php
之前,controller
到底需要做什么?
答案 1 :(得分:2)
只要您包含继承的类,就不需要再次使用。
即
class1.php:
<?php
require_once("tools.php");
class class1 {
}
?>
class2.php:
<?php
require_once("class1.php");
class class2 extends class1 {
}
?>
答案 2 :(得分:0)
是的,你这样做。 require_once "foo.php"
有效地获取foo.php
的内容并粘贴它们(然后处理所有 require
和include
s。