扩展一个类并在PHP中包含它有什么区别?

时间:2009-06-09 15:24:06

标签: php oop include extends

有人可以向我解释

之间的区别
include_once 'classb.php'
class A
{
     $a = new B
}

class A extends B
{
     $a = new B
}

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

4 个答案:

答案 0 :(得分:8)

您的include_once读取了一个源文件,在这种情况下,该文件可能包含B的类定义。您的extends将课程A设置为inheriting课程B,即A获取B中的所有内容,然后可以定义自己的修改$a = new B基本结构。这两个操作之间根本没有任何关系,并且您的{{1}}操作是荒谬的(更不用说语法错误)。

答案 1 :(得分:6)

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

使用extends绑定A来做与B类似的操作,而在A中创建B的实例不会对A施加任何限制。

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

My 2 Cents

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

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

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

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

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

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

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

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