精华内容
下载资源
问答
  • PHP多态代码实例
    2021-03-23 22:30:44

    这篇文章主要介绍了PHP多态代码实例,本文用2个代码实例来演示PHP中的多态,需要的朋友可以参考下

    多态定义:只关心一个接口或者基类,而不关心一个对象的具体类。(同一类型,不同结果)

    这里两个例子:

    第一个,我们发现,基类定义了标准,子类进行了自我规则的实现。这是多态的一个要求。同时,这是满足重写;实际上这是不同类的不同表现;没有严格满足一个接口,或者基类编程。因为你调用的时候不是 stu->showGrade() 而是各自自己的方法;

    class stu{

    public function showGrade(){

    echo "base class";

    }

    }

    class xiaomin extends stu{

    public function showGrade(){

    echo "is son show 80";

    }

    }

    class xiaoli extends stu{

    public function showGrade(){

    echo "is son show 60";

    }

    }

    function doit($obj){

    if(get_class($obj) != "stu"){

    $obj->showGrade();

    }

    }

    doit(new xiaoli());

    doit(new xiaomin());

    第二个例子:dovoice 参数规定了$obj 为animal,意识就是用接口 接受了 实现类对象。了向上转型。这就符合同一类型,不同结果了,这就是多态;

    实际上在Java中 会是 animal a = new dog();这样子的;因为PHP 是若类型语言。没有对象转型机制。

    interface animal{

    public function voice();

    }

    class cat implements animal{

    public function voice(){

    echo "miao~~~
    ";

    }

    }

    class dog implements animal{

    public function voice(){

    echo "wang ~~~
    ";

    }

    }

    function dovoice(animal $obj){

    $obj->voice();

    }

    dovoice(new dog());

    dovoice(new cat());

    更多相关内容
  • PHP 多态实现

    2013-01-10 21:26:53
    此时就可以采用多态实现该类设计。 【示例】 例举了通常采用流程控制语句实现不同类的处理。其代码如下所示。 class painter{ //定义油漆工类 public function paintbrush(){ //定义油漆工动作 echo "油漆工...

    多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息将可以产生不同的结果,这种现象称为多态性。

    多态性允许每个对象以适合自身的方式去响应共同的消息。多态性增强了软件的灵活性和重用性。

    在面向对象的软件开发中,多态性是最为重要的部分之一。面向对象编程并不只是将相关的方法与数据简单的结合起来,而是采用面向对象编程中的各种要素将现实生活中的各种情况清晰的描述出来。这一小节将对面向对象编程中的多态性作详细的讲解。

    1.什么是多态

    多 态(Polymorphism)按字面上意思理解就是“多种形状”。可以理解为多种表现形式,也即“一个对外接口,多个内部实现方法”。在面向对象的理论 中,多态性的一般定义为:同一个操作作用于不同的类的实例,将产生不同的执行结果。也即不同类的对象收到相同的消息时,将得到不同的结果。

    在实际的应用开发中,采用面向对象中的多态主要在于可以将不同的子类对象都当作一个父类来处理,并且可以屏蔽不同子类对象之间所存在的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

    2.  多态的应用设计

    在实际的应用开发中,通常为了使项目能够在以后的时间里的轻松实现扩展与升级,需要通过继承实现可复用模块进行轻松升级。在进行可复用模块设计时,就需要尽可能的减少使用流程控制语句。此时就可以采用多态实现该类设计。

    【示例】例举了通常采用流程控制语句实现不同类的处理。其代码如下所示。

    class painter{                                    //定义油漆工类
            public function paintbrush(){                 //定义油漆工动作
                echo "油漆工正在刷漆!\n";
            }
        }
    
        class typist{                                    //定义打字员类
            public function typed(){                     //定义打字员工作
                echo "打字员正在打字!\n";
            }
        }
    
        function printworking($obj){                    //定义处理类
            if($obj instanceof painter){                //若对象是油漆工类,则显示油漆工动作
                $obj->paintbrush();
            }elseif($obj instanceof typist){            //若对象是打字员类,则显示打字员动作
                $obj->typed();
            }else{                                    //若非以上类,则显示出错信息
                echo "Error: 对象错误!";
            }
        }
    
        printworking(new painter());                    //显示员工工作
        printworking(new typist());                     //显示员工工作
      分析:在上述程序中,首先定义两个员工类:油漆工类和打字员类。然后定义一个处理函数,在该函数中,判断员工是否为已经定义的员工,打印出员工的工作状态。其结果如下所示。  


    油漆工正在刷漆  
    打字员正在打字


    从 以上程序可轻松看出,若想显示其几种员工的工作状态,需要首先定义该员工类,并在该员工类中定义员工的工作,然后在printworking()函数中增 加elseif语句以检查对象是哪一员工类的实例。这在实际的应用中,是非常不可取的。若此时采用多态,则可以轻松解决此问题。

    可以首先创建一个员工父类,所有的员工类将继承自该员工父类,并且继承父类的所有方法与属性。然后在员工类中创建“是一”关系,判断是否为合法的员工。

    【示例】例举了采用多态的方式改写上例。其代码如下所示。

    class employee{//定义员工父类
        protected function working(){//定义员工工作,需要在子类的实现
            echo "本方法需要在子类中重载!";
        }
    
    }
    
    class painter extends employee{//定义油漆工类
        public function working(){//实现继承的工作方法
            echo "油漆工正在刷漆!\n";
        }
    }
    
    class typist extends employee{//定义打字员类
        public function working(){
            echo "打字员正在打字!\n";
        }
    }
    
    class manager extends employee{//定义经理类
        public function working(){
            echo "经理正在开会!";
        }
    }
    
    function printworking($obj){//定义处理方法
        if($obj instanceof employee){//若是员工对象,则显示其工作状态
            $obj->working();
        }else{//否则显示错误信息
            echo "Error: 对象错误!";
        }
    }
    
    printworking(new painter());//显示油漆工的工作
    printworking(new typist());//显示打字员的工作
    printworking(new manager());//显示经理的工作
      分析:在上述程序中,首先定义一个员工基类,并定义一个员工工作状态的方法。然后定义将继承自员工基类的三个员工类:油漆工类、打字员类和经理类。然后定义显示员工工作状态的方法。并在该方法中创建一个“是一”关系,用于判断是否为合法的员工。其结果如下所示。


    油漆工正在刷漆! 
    打字员正在打字! 
    经理正在开会!


    从上例可发现,无论增加多少个员工类,只需要实现自员工父类继承的该员工类和方法。而无须修改显示员工工作状态的方法printworking()。

    展开全文
  • 多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得...1.什么是多态 多 态(Polymorphism)按字面上意思理解就是“多种形状”。可以理解为多种表现形式,也即“一个对外接口,多个内部实现方法”。在
  • PHP5中实现多态的两种方法实例在PHP5中,变量的类型是不确定的,一个变量可以指向任何类型的数值、字符串、对象、资源等。我们无法说PHP5中多态的是变量。以下是小编整理的关于在PHP5中多态应用方法,欢迎来阅读!...

    PHP5中实现多态的两种方法实例

    在PHP5中,变量的类型是不确定的,一个变量可以指向任何类型的数值、字符串、对象、资源等。我们无法说PHP5中多态的是变量。以下是小编整理的关于在PHP5中多态应用方法,欢迎来阅读!

    我们只能说在PHP5中,多态应用在方法参数的类型提示位置。

    一个类的任何子类对象都可以满足以当前类型作为类型提示的类型要求。

    所有实现这个接口的类,都可以满足以接口类型作为类型提示的方法参数要求。

    简单的说,一个类拥有其父类、和已实现接口的身份。

    通过实现接口实现多态

    复制代码 代码如下:

    interface User{ // User接口

    public function  getName();

    public function setName($_name);

    }

    class NormalUser implements User { // 实现接口的类.

    private $name;

    public function getName(){

    return $this->name;

    }

    public function setName($_name){

    $this->name = $_name;

    }

    }

    class UserAdmin{ //操作.

    public static function  ChangeUserName(User $_user,$_userName){

    $_user->setName($_userName);

    }

    }

    $normalUser = new NormalUser();

    UserAdmin::ChangeUserName($normalUser,"Tom");//这里传入的是 NormalUser的.实例.

    echo $normalUser->getName();

    ?>

    使用接口与组合模拟多继承

    通过组合模拟多重继承。

    在PHP中不支持多重继承,如果我们向使用多个类的方法而实现代码重用有什么办法么?

    那就是组合。在一个类中去将另外一个类设置成属性。

    下面的例子,模拟了多重继承。

    接口实例

    写一个概念性的例子。 我们设计一个在线销售系统,用户部分设计如下: 将用户分为,NormalUser, VipUser, InnerUser 三种。要求根据用户的不同折扣计算用户购买产品的价格。并要求为以后扩展和维护预留空间。

    复制代码 代码如下:

    interface User

    {

    public function getName();

    public function setName($_name);

    public function getDiscount();

    }

    abstract class AbstractUser implements User

    {

    private $name = "";

    protected  $discount = 0;

    protected  $grade = "";

    展开全文
  • abstractclassFigure{//定义图形基类,Figure由Square、Circle抽象得出。abstractfunctionget_area();//计算图形面积,本方法需要在子类中重载!}classSquareextendsFigure{//正方形private$name="正方形";...

    abstract class Figure { //定义图形基类,Figure由Square、Circle抽象得出。

    abstract function get_area(); //计算图形面积,本方法需要在子类中重载!

    }

    class Square extends Figure { //正方形

    private $name = " 正方形 ";

    private $s_length; //正方形的私有属性:边长

    function __construct($s_length) { //初始化正方形

    $this->s_length = $s_length;

    }

    function get_area() {

    return $this->s_length * $this->s_length;

    }

    function __set($name, $value) {

    $this-> $name = $value;

    }

    function __get($name) {

    return $this-> $name;

    }

    }

    class Circle extends Figure { //圆形

    private $name = " 圆形 ";

    private $radius; //圆的私有属性:半径

    function __construct($radius) { //初始化圆形

    $this->radius = $radius;

    }

    function get_area() {

    return M_PI * $this->radius * $this->radius;

    }

    function __set($name, $value) {

    $this-> $name = $value;

    }

    function __get($name) {

    return $this-> $name;

    }

    }

    function print_area($obj) { //定义显示面积方法

    if ($obj instanceof Figure) {

    echo $obj->name . "面积:" . $obj->get_area();

    } else { //否则显示错误信息

    echo "Error: 对象错误!";

    }

    }

    print_area(new Square("5"));

    echo "
    ";

    print_area(new Circle("3"));

    ?>

    执行结果:

    正方形 面积:25

    圆形 面积:28.274333882308

    展开全文
  • php 多态实现案例

    2017-06-20 22:35:00
    2 //多态案例 3 //老师会画多边行,传一个图形让ta画就行了 4 class Teacher{ 5 function drawPolygon(Polygon $polygon){ //弱语言,限定参数类型,php5.3+ 6 $polygon->draw(); 7 } 8 } 9 //...
  • 浅谈多态以及php实现方法

    万次阅读 2017-04-19 17:13:26
    多态实现的前提:必须是类与类之间要有关系,要么继承,要么实现,存在重写(override),其实就是抽象函数或接口。 多态的应用:父类对象的引用指向子类对象,其实本质上就是一个向上转型。 举个模型例子,一家...
  • 主要介绍了PHP基于接口技术实现简单的多态应用,结合完整实例形式分析了php接口的定义、继承、调用及多态的相关实现技巧,需要的朋友可以参考下
  • 多态这个概念,在Java中指的是变量可以指向的对象的类型,可是变量声明类型的子类。对象一旦创建,它的类型是不变的,多态的是变量
  • PHP多态如何实现

    2021-03-23 22:30:35
    PHP多态如何实现PHP是一种HTML内嵌式的,用来制作动态网页的服务器端的脚本语言。以下是百分网小编整理的PHP多态如何实现的内容,欢迎学习!1 PHP语言介绍PHP是一种HTML内嵌式的,用来制作动态网页的服务器端的...
  • #PHP实现类的多态帮助类ClassUtil #PHP实现函数多态的帮助类ClassUtil 使用举例: class calc { public function __construct() { $args=func_get_args(); ClassUtil::callMethodForArgs($this,$args); } ...
  • 本文实例讲述了PHP面向对象多态实现方法。分享给大家供大家参考,具体如下:多态:父类引用指向子类对象(面向对象中能够根据使用类的上下文(使用输入不同的类调用不同类的方法)来重新定义或改变类的性质和行为。);...
  • php怎么实现多态

    2019-09-21 12:36:24
    我们无法说PHP5中多态的是变量。 我们只能说在PHP5中,多态应用在方法参数的类型提示位置。 一个类的任何子类对象都可以满足以当前类型作为类型提示的类型要求。 所有实现这个接口的类,都可以满足以接口类型...
  • php接口的多态实现

    2019-04-22 16:07:09
    现实生活的例子: 让我们看现实中的一个例子。我们的电脑有USB接口,你可以选择在这个USB接口上插入一个鼠标,键盘,或者是手机,硬盘都可以,电脑就会进行不同...这对继承中抽象方法的实现就是类的多态的体现。 ...
  • PHP使用组合实现多态

    2021-04-12 17:44:05
    * WEB开发笔记 www.chhua.com 每日练习之PHP使用组合实现类的多态?*//*?* 类说明:某大学开两门课程,一个是PHP,一个是JAVA,规定不同的价格?*/abstract class lesson {//定义一个抽象基类?protected $lessonType;?...
  • php多态实现

    千次阅读 2011-04-27 17:20:00
    此时就可以采用多态实现该类设计。   【示例】例举了通常采用流程控制语句实现不同类的处理。其代码如下所示。   <?php class painter{ //定义油漆工类 public function paintbrush(){ //定义油漆工...
  • 利用多态实现加减乘除运算 #include <iostream> using namespace std; class AbstractCal//实现计算器抽象类 { public: virtual int getResult()//虚函数实现动态多态,运行阶段才确定函数地址 { return 0...
  • * WEB开发笔记 www.chhua.com 每日练习之PHP设计模式继承的实现?*//*?* 类说明:某大学开两门课程,一个是PHP,一个是JAVA,规定不同的价格?*/abstract class lesson {//定义一个抽象基类?protected $lessonType;?...
  • 1.重载的实现:方法1:用__call()方法今天遇到一个头疼的问题,如何在PHP实现方法重载(包括构造器重载).查阅了很多资料,直接重载是无法实现的.但是可以通过__call()方法来变相实现.实际上这个方法我认为很差.是PHP...
  • php教程 类中多态的应用Instanceof:用来测定一个给定的对象是否来自指定的对象类class A{}class B{}$thing=new A();//return trueif ($thing instanceof A) {echo ‘A’;}//return falseif ($thing instanceof B) {...
  • java中实现多态的方式

    2021-03-06 04:02:30
    Java中实现多态的方式:1、接口实现;2、继承父类进行方法重写;3、同一个类中进行方法重载。多态存在的必要条件:1、要有继承;2、要有重写;3、父类引用指向子类对象。多态的好处:1、可替换性(substitutability)...
  • php多态

    2021-03-24 12:07:33
    二、php中的多态多态的概念一般是强类型语言来谈的,因为强类型语言它必须要声明参数类型,比如一个手电筒对象的打开方法其参数申明了只能是蓝光,就不能传其他光。但可以用父类渲染的方式使其多态,比如声明一个光的...
  • PHP的最新发行版本中已经实现了对迟绑定的支持。当然,在使用其迟绑定功能时还存在很多问题。如果你使用的是更旧版本的PHP(我的服务器上运行的是PHP 5.0.1版本),那么你可能发现其中缺乏对于迟绑定的支持。因此,请...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,263
精华内容 4,505
热门标签
关键字:

php多态实现