前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP面向对象核心(二)——继承、多态、接口

PHP面向对象核心(二)——继承、多态、接口

作者头像
用户1327360
发布2018-03-07 10:04:28
8880
发布2018-03-07 10:04:28
举报
文章被收录于专栏:决胜机器学习决胜机器学习

PHP面向对象核心(二)

(原创内容,转载请注明来源,谢谢)

三、继承与多态

3.1 继承

1、继承是类级别的复用,关键词为extends;多态是方法级别的复用。

2、类的组合:一个类作为另一个类的属性;类的继承:子类继承父类的全部内容。

3、范围解析运算符(::)

当子类需要调用父类的方法或者属性时使用此运算符;

当调用类常量和静态方法时使用此符号调用。

4、决定采用组合还是继承,目标是低耦合,即使模块之间尽量独立。

继承扩展简单,但破坏封装,且紧耦合;组合缺点是代码量大。

5、当类不是设计用于继承的,可以加上final,避免被继承。

当方法不想被覆盖,也可以加上final,父类方法被子类覆盖。

属性没有final,只有类和方法可以定义为final。

3.2 多态

1、多态可以理解为同一对象在允许时的具体化。

2、重载不等于多态,重载是多态的一种表现形式。

3、多态的实现方式——通过PHP的get_class()方法

PHP执行结果如下:

PHP源码如下:

代码语言:php
复制
<?php
class plane{}
class car{}
class other{}
function muti($obj){
     $now_class= get_class($obj);
     if($now_class== 'plane'){
              echo$now_class.'的执行结果是:fly<br />';
     }elseif($now_class == 'car'){
              echo$now_class.'的执行结果是:drive<br />';
     }else{
              echo$now_class.'的执行结果是:error<br />';
     }
}
muti(new plane());
muti(new car());
muti(new other());

四、接口

1、接口可以视为类与类之间的协议,对于采用接口(implements)的类,都要实现接口内部定义的方法,否则会报fetal错误。

2、PHP接口的不足在于内部接口较少,且没有契约限制,即允许继承接口的类实现接口没有定义的方法。

3、Iterator迭代器接口,实现此接口的类可以采用foreach输出。该接口有五个方法,分别是:current、key、next、rewind、valid。

PHP的SPL中有一个类DirectoryIterator,该类实现了Iterator接口。

IteratorAggregate 接口替代实现所有的Iterator 方法。IteratorAggregate 只需要实现一个方法 getIterator(),即可实现输出结果。

4、traits

Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制,可以认为是一种加强型接口。

优先级方面,从基类继承的成员会被trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。

如果两个 trait 都插入了一个同名的方法,如果没有明确解决冲突将会产生一个致命错误。为了解决多个 trait 在同一个类中的命名冲突,需要使用 insteadof 操作符来明确指定使用冲突方法中的哪一个。

例如:classB::functionName instance of classA,则定义A、B两个类中同名的方法functionName采用B定义的内容。

但是,对于属性,Trait 定义了一个属性后,类就不能定义同样名称的属性,否则会产生 fatal error。除非属性是兼容的(即同样的访问可见度、初始默认值)。

简单示例:

代码语言:php
复制
<?php
trait TraitA{
         public$a = 10;
    public function echoA{
    echo $this->a;
}
}
class ClassA{
    use TraitA;
}
$a = new ClassA();
$a->echoA();//输出 10

——written by linhxx 2017.06.20

相关阅读:PHP面向对象核心(一)——序列化与魔术方法

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 决胜机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档