搜尋
首頁php教程php手册实例讲解PHP面向对象之多态

这篇文章主要介绍了实例讲解PHP面向对象之多态,本文用实例讲解什么情况下使用PHP的多态、多态的好处等内容,可以充分帮你理解多态,需要的朋友可以参考下

什么是多态性?

多态性是继数据库抽象和继承后,面向对象语言的第三个特征。多态即多种形态,具有表现多种形态的能力特征。在面向对象中表示根据对象的类型以不同方式处理。多态性允许每个对象以适合自身的方式去响应共同的消息。多态性增强了软件的灵活性和重用性。

如我们创建一个doing()方法,如果是学生则打印上课,如是公司职员则打印上班。

普通做法

使用if判断

复制代码 代码如下:


/**
 * PHP多态性
 * 琼台博客
 */
 
// 定义学生类
class student{
    public function cla(){
            echo "学生工正在上课!
";
    }
}
 
// 定义职员类
class office{                             
        public function Wor(){
            echo "职员正在上班!
";
        }
}
 
// 判断对象类型方法
function doing($obj){
        if($obj instanceof student){
            $obj->cla();
        }elseif($obj instanceof office){
            $obj->wor();
        }else{
            echo "没有这个对象!";
        }
}
 
doing(new student()); // 学生正在上课
doing(new office());  // 职员正在上班

以上结果输出:

学生正在上课
职员正在上班

这种普通方法有个缺点,就是对象如果很多,,那么if..else..很长,不灵活。
 
多态性做法

定义一个公共抽象方法,所有子类继承它。

复制代码 代码如下:


/**
 * PHP多态性
 * 琼台博客
 */
 
// 定义一个公共类
class pub{
    protected function working(){
        echo "本方法需要在子类中重载!";
    }
}
 
// 定义学生类,继承公共类pub
class student extends pub{
    public function working(){
        echo "学生工正在上课!
";
    }
}
 
// 定义职员类,继承公共类pub
class office extends pub{
        public function working(){
        echo "职员正在上班!
";
        }
}
 
// 判断对象类型方法
function doing($obj){
        if($obj instanceof pub){
            $obj->working();
        }else{
            echo "没有这个对象!";
        }
}
 
doing(new student()); // 学生正在上课
doing(new office());  // 职员正在上班


这就是多态的特性,灵活重用。
 
其它做法

从多态性的实现方式来看,无非就规范了每个类都要重载父类的一个方法,从而达到统一效果。而我们在定义类的时候,自行加上统一的方法也可行。因此以上例子也可以这么实现:

复制代码 代码如下:


/**
 * PHP多态性
 * 琼台博客
 */
 
// 定义学生类
class student{
    // 定义统一的方法pub
    public function pub(){
        echo "学生工正在上课!
";
    }
}
 
// 定义职员类
class office{
    // 定义统一的方法pub
        public function pub(){
        echo "职员正在上班!
";
        }
}
 
// 判断对象类型方法
function doing($obj){
    if($obj){
        // 调用类的统一方法
            $obj->pub();
    }else{
        echo '没有这个对象'; 
    }
}
 
doing(new student()); // 学生正在上课
doing(new office());  // 职员正在上班


当然,以上的例子不能说明多态性就能使用这样的方式搞定,毕竟多态性在复杂的程序设计中,它能有效的达到灵活重用的特性。

多态性也可以理解为一种程序设计方式,而程序设计最终目的无非就是:灵活,多态,重用,高效。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能