有人可以向我解释一下有什么区别吗
include_once 'classb.php'
class A
{
$a = new B
}
和
class A extends B
{
$a = new B
}
是?
扩展类与包含 .php 文件有哪些优点/缺点?
你include_once
读入了一个源文件,在这种情况下,它可能有一个类定义B
。您extends
将类设置A
为继承类B
,即A
获取所有内容,B
然后可以定义自己对该基本结构的修改。这两个操作之间根本没有任何关系,而且您的$a = new B
操作是无意义的(更不用说语法错误了)。
如果您正在寻找更高级别的答案...
使用 extends 将 A 绑定到与 B 类似的事情上,而在 A 中创建 B 的实例不会对 A 施加任何限制。
第二种方法称为组合,通常是构建 OO 系统的首选方法,因为它不会产生很高的类层次结构并且长期更灵活。然而,它确实产生了稍微慢一些的代码,并且比简单地使用扩展更多。
我的 2 美分
第二,即扩展,——是类操作。首先,即include - 是文件操作,(编译前)。
所以 - 第二个是不可能的。没有第一。
首先,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))