PHP:require_once和继承

时间:2010-10-11 14:59:04

标签: php inheritance require-once

如果我有:

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

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

如果在require_once定义中完成了class controller该怎么办?

谢谢!

JDelage

3 个答案:

答案 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的内容并粘贴它们(然后处理所有 requireinclude s。