• php 多态的理解


    php是面向对象的脚本语言,而我们都知道,面向对象的语言具有三大特性:封装,继承,多态。php理应具有这三大特性。

      封装是类的构建过程,php具有;php也具有继承的特性。唯独这个多态,php体现的十分模糊。原因是php是弱类型语言。

      java的多态体现的十分清晰,大体分两类:父类引用指向子类对象;接口引用指向实现接口的类对象。java声明变量时都要给变量设定类型,所以存在什么父类引用和接口引用。而php则没有这点体现,php声明变量不需要给变量设定类型,一个变量可以指向不同的数据类型。所以,php不具有像java一样的多态。

      php不具有像java那种清晰的多态,不是代表php不具有多态性。看下面一个例子:

    复制代码
     1 abstract class animal{
     2     abstract function fun();
     3 }
     4 class cat extends animal{
     5     function fun(){
     6         echo "cat say miaomiao...";
     7     }
     8 }
     9 class dog extends animal{
    10     function fun(){
    11         echo "dog say wangwang...";
    12     }
    13 }
    14 function work($obj){
    15     if($obj instanceof animal){
    16         $obj -> fun();
    17     }else{
    18         echo "no function";
    19     }
    20 }
    21 work(new dog()); 
    22 work(new cat());
    复制代码

      上面通过一个关键字instanceof来判断,变量指向的对象是否是animal类的一个实例,下面new cat(),new dog()都是animal子类的对象,而输出了“dog say wangwang...”和“cat say miaomiao...”,说明子类对象是父类的一个实例,从而达到了java多态的功能。

      上边的类是抽象类,也表明了接口与实现接口的类对象同样可以适用。

      至此,得出php虽然多态体现模糊,但还是具有多态特性的。

    如果不曾相逢,心绪不会如此沉重
  • 相关阅读:
    暑假第二周总结
    7.18-7.24 第一周周报
    poj 3295 Tautology
    2016多校 #2 1006 Fantasia
    codeforces 698B Fix a Tree
    codeforces 699B Bomb
    HDU 4578(线段树
    CF 600F( 二分图
    hdu 5517 Triple(二维树状数组)
    HDU HDOJ5412(树套树or整体二分
  • 原文地址:https://www.cnblogs.com/yyy251/p/6409208.html
Copyright © 2020-2023  润新知