如果我有:PHP:require_once和继承
<?php
require_once("bla.php");
class controller{.....}
php>
如果我再在不同的文件class control_A extends controller{...}
创建,我需要再说一遍require_once("bla.php");
,抑或是遗传吗?
如果require_once
在class controller
定义内完成,该怎么办?
谢谢!
JDelage
如果我有:PHP:require_once和继承
<?php
require_once("bla.php");
class controller{.....}
php>
如果我再在不同的文件class control_A extends controller{...}
创建,我需要再说一遍require_once("bla.php");
,抑或是遗传吗?
如果require_once
在class controller
定义内完成,该怎么办?
谢谢!
JDelage
到目前为止,我们有两个矛盾的,但同样正确的答案=)让我们看看,如果我不能合并两成一个更具体的总答案。
如果任何类需要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
中做什么,在定义该类之前都必须运行,这是不必要的或者可以重新构造的。在定义controller
之前,bla.php
究竟做了什么?
是的,你这样做。 require_once "foo.php"
有效地采用foo.php
的内容并将它们粘贴(然后处理所有的其 s和include
s)。
你的措辞没有意义。你说它处理包含的文件需要/包括但是你也说你需要单独需要文件(你不这样做)。 – 2010-10-11 15:10:24
啊,我在这里看到这个问题。假设他在'foo.php'中定义了'Foo'类,并在该文件中包含了一些库。凭借扩展课程,他不会自动包含该图书馆。但是,因为他包含'foo.php',他确实包含了有问题的库。那有意义吗? – 2010-10-11 16:15:40
只要你包含继承的类,它不需要再次需要。
I.e.
class1.php:
<?php
require_once("tools.php");
class class1 {
}
?>
class2.php:
<?php
require_once("class1.php");
class class2 extends class1 {
}
?>
这取决于'bla.php'的作用? – 2010-10-11 15:01:49