有人可以向我解释
之间的区别include_once 'classb.php'
class A
{
$a = new B
}
和
class A extends B
{
$a = new B
}
是
扩展类与包含.php文件有什么优点/缺点?
答案 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))