7

有人可以向我解释一下有什么区别吗

include_once 'classb.php'
class A
{
     $a = new B
}

class A extends B
{
     $a = new B
}

是?

扩展类与包含 .php 文件有哪些优点/缺点?

4

4 回答 4

8

include_once读入了一个源文件,在这种情况下,它可能有一个类定义B。您extends将类设置A继承B,即A获取所有内容,B然后可以定义自己对该基本结构的修改。这两个操作之间根本没有任何关系,而且您的$a = new B操作是无意义的(更不用说语法错误了)。

于 2009-06-09T15:28:50.303 回答
6

如果您正在寻找更高级别的答案...

使用 extends 将 A 绑定到与 B 类似的事情上,而在 A 中创建 B 的实例不会对 A 施加任何限制。

第二种方法称为组合,通常是构建 OO 系统的首选方法,因为它不会产生很高的类层次结构并且长期更灵活。然而,它确实产生了稍微慢一些的代码,并且比简单地使用扩展更多。

我的 2 美分

于 2009-06-09T15:34:47.110 回答
2

第二,即扩展,——是类操作。首先,即include - 是文件操作,(编译前)。

所以 - 第二个是不可能的。没有第一。

于 2011-05-01T11:06:06.097 回答
1

首先,include 是一个读取 php 源文件并将其视为代替 include 指令编写的命令。您可以在任何 php 源文件上使用它,并且与类继承无关。

顺便说一句,如果您不包含包含 A 类源代码的文件,则无法扩展该类。

使用关键字extends扩展类意味着继承的概念,这是面向对象编程中的一个关键概念。

您得到一个具有一些方法的类 (A),并且需要一个具有稍微不同行为的类似类 (B),您可以派生新类扩展类 A 并仅修改必须更改的方法(称为覆盖)或添加新的。

与继承相反的是组合。使用组合,您无需扩展类来更改其行为,而是必须拼凑类以获得所需的行为。

在维基百科上,您可以找到关于对象组合和[类继承]的更好解释(http://en.wikipedia.org/wiki/Inheritance_(computer_science))

这些概念似乎有些混乱,因为您扩展了 A 类,同时尝试组合它(顺便说一下,正确的语法是$a=new B();)。

一个有用的参考,显然,[Gof,设计模式]( http://en.wikipedia.org/wiki/Design_Patterns_(book))

于 2009-06-09T16:07:49.303 回答