ddxiami

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2958|回复: 2

[细说PHP] 第10章PHP面向对象的程序设计--抽象类与接口、多态性的应用

[复制链接]
发表于 2013-8-6 22:59:36 | 显示全部楼层 |阅读模式
抽象类

<?php
        //声明一个抽象类,要使用abstract关键字标识
        abstract class Person {                    
                protected $name;                    //声明一个存储人的名字的成员
                protected $country;                   //声明一个存储人的国家的成员
                        
            function __construct($name="", $country="china") {        
                        $this->name = $name;                     
                        $this->country = $country;                 
                }
               
                //在抽象类中声明一个没有方法体的抽象方法,使用abstract关键字标识
                abstract function say();                  
        
                //在抽象类中声明另一个没有方法体的抽象方法,使用abstract关键字标识
                abstract function eat();                  
               
                //在抽象类中可以声明正常的非抽象的方法
                function run(){                        
                        echo "使用两条腿走路<br>";  //有方法体,输出一条语句
                }
        }

        //声明一个类去继承抽象类Person
        class ChineseMan extends Person {
                //将父类中的抽象方法覆盖,按自己的需求去实现
                function say() {                    
                        echo $this->name."是".$this->country."人,讲汉语<br>";         //实现的内容
                }
               
                //将父类中的抽象方法覆盖,按自己的需求去实现
                function eat() {                     
                        echo $this->name."使用筷子吃饭<br>";                        //实现的内容
                }
        }
        
        //声明另一个类去继承抽象类Person
        class Americans extends Person {         
                //将父类中的抽象方法覆盖,按自己的需求去实现
                function say() {                    
                        echo $this->name."是".$this->country."人,讲英语<br>";         //实现的内容
                }
               
                //将父类中的抽象方法覆盖,按自己的需求去实现
                function eat() {                    
                        echo $this->name."使用刀子和叉子吃饭<br>";                   //实现的内容
                }
        }

        $chineseMan = new ChineseMan("高洛峰", "中国");                 //将第一个Person的子类实例化对象
        $americans = new Americans("alex", "美国");                      //将第二个Person的子类实例化对象

        $chineseMan -> say();                //通过第一个对象调用子类中已经实例父类中抽象方法的say()方法
        $chineseMan -> eat();           //通过第一个对象调用子类中已经实例父类中抽象方法的eat()方法

        $americans -> say();            //通过第二个对象调用子类中已经实例父类中抽象方法的say()方法
        $americans -> eat();                   //通过第二个对象调用子类中已经实例父类中抽象方法的eat()方法
回复

使用道具 举报

 楼主| 发表于 2013-8-6 23:03:52 | 显示全部楼层
接口技术

<?php
        //声明一个接口使用interface关键字,One为接口名称
        interface One {                                 
                const CONSTANT = 'CONSTANT value';                 //在接口中声明一个常量成员属性和在类中声明一样
                function fun1();                             //在接口中声明一个抽象方法“fun1()”
                function fun2();                             //在接口中声明另一个抽象方法“fun2()”
        }
       
        //声明一个抽象类去实现接口One中的第二个方法
        abstract class Three implements One {              
                function fun2() {                            //只实现接口中的一个抽象方法
                        //具体的实现内容由子类自决定
                }
        }

        //声明一个类实现接口One中的全部抽象方法
        class Four implements One {                             
                function fun1() {                           //实现接口中第一个方法
                        //具体的实现内容由子类自决定
                }       

                function fun2() {                           //实现接口中的第二个方法
                        //具体的实现内容由子类自决定
                }
        }

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-6 23:18:00 | 显示全部楼层
多态性的应用

<?php       
        //定义一个USB接口,让每个USB设略都遵守这个规范
        interface USB {
                function run();
        }
       
        //声明一个电脑类, 去使用USB设置
        class Computer {
                //电脑类中的一个方法可以应用任何一种USB设备
                function useUSB($usb) {
                        $usb -> run();
                }
        }

        //扩展一个USB键盘设置,实现USB接口
        class Ukey implements USB {
                //按键盘的功能实现接口中的方法
                function run() {
                        echo "运行USB键盘设备<br>";
                }
        }
       
        //扩展一个USB鼠标设置,实现USB接口
        class Umouse implements USB {
                //按鼠标的功能实现接口中的方法
                function run() {
                        echo "运行USB鼠标设备<br>";
                }
        }
       
        //扩展一个USB存储设置,实现USB接口
        class Ustore implements USB {
                //按存储的功能实现接口中的方法
                function run() {
                        echo "运行USB存储设备<br>";
                }
        }
       
        $computer = new Computer;                                        //实例化一个电脑类的对象                       
       
        $computer ->useUSB( new Ukey() );                        //为电脑插入一个USB键盘设备,并运行
        $computer ->useUSB( new Umouse() );                        //为电脑插入一个USB鼠标设备,并运行
        $computer ->useUSB( new Ustore() );                        //为电脑插入一个USB存储设备,并运行
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|技术文档库 ( 闽ICP备15017263号-2 )|网站地图

GMT+8, 2025-5-18 18:08 , Processed in 0.038709 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表