Rumah pembangunan bahagian belakang tutorial php 探讨PHP5多态性的具体实现方式_PHP教程

探讨PHP5多态性的具体实现方式_PHP教程

Jul 15, 2016 pm 01:28 PM
php5 khusus wujud Polimorfisme capai betul Bincangkan sokongan versi baharu Cara

PHP5作为一个新版本,实现了对迟绑定的支持,不过在实际应用中,迟绑定功能还存在一些问题,比如你使用的是更旧版本的PHP,那么你可能发现其中缺乏对于迟绑定的支持。我们今天为大家讲的就是关于一、 PHP 5和多态性

本文想讨论面向对象编程中最为重要的部分之一--多态性的设计。为了说明问题,我使用了PHP 5。在你继续阅读之前,请首先明确本文并不是完全有关于PHP的。尽管这种语言在以前的两个主要版本中在快速开发方面已经取得很大的进步,但是,在其与更为成熟的语言如C++或者Java相匹敌之前,它对于对象的支持还要经历一段历程。

如果你是一位面向对象编程的入门者,那么本文可能不适合你,因为PHP5多态性这部分知识比较特别:一旦理解了它,你将永远不会忘记。如果你想简单了解一点对象编程和设计知识,并且当某人说"某个对象是多态的"时,还不十分清楚这是什么意思的话,那么本文正适合你。

到本文最后,你应该知道什么是多态性以及如何把它应用到面向对象的设计中,并且你会了解PHP 5中对象编程的优点与不足。

二、什么是多态性?

多态性,其来自于dictionary.com的定义是"以不同形式,阶段或者类型出现在独立的组织中或者同种组织中,而不存在根本区别。"由该定义,我们可以认为,多态性是一种通过多种状态或阶段来描述相同对象的编程方式。其实,它的真正意义在于:实际开发中,我们只需要关注一个接口或基类的编程,而不必担心一个对象所属于的具体类(class)。

如果你熟悉设计模式,即使只是有个初步了解,那么你也会了解这个概念。事实上,PHP5多态性可能是基于模式设计编程中的最伟大的工具。它允许我们以一种逻辑的方式来组织相类似的对象从而实现在具体编码时不必担心对象的具体类型;而且,我们只需要对一个所期望的接口或基类编程即可。一个应用程序越抽象,则它就显得越灵活--而多态性是对行为加以抽象的最好的方式之一。

例如,让我们考虑一个叫Person的类。我们可以用称为David,Charles和Alejandro的类来子类化Person。Person有一个抽象方法AcceptFeedback(),所有的子类都要实现这个方法。这意味着,任何使用基类Person的子类的代码都能调用方法AcceptFeedback()。你不必检查该对象是一个David还是一个Alejandro,仅知道它是一个Person就够了。结果是,你的代码只需关注"最小公分母"-Person类即可。

在这个示例中的Person类也可以被创建为一个接口。当然,与上面相比存在一些区别,主要在于:一个接口并没有给出任何行为,而仅确定了一组规则。一个Person接口要求的是"你必须支持AddFeedback()方法",而一个Person类可以提供一些AddFeedback()方法的缺省代码-你对之的理解可以是"如果你不选择支持AddFeedback(),那么你应该提供一种缺省实现。"至于如何选择接口或基类则并非本文的主题;但是,一般说来,你需要通过基类来实现一个缺省的方法。如果你能够简单地勾勒出你的类所要实现的一组期望的功能,那么你也可以使用一个接口。

三、应用PHP5多态性设计

我们将继续使用Person基类的例子,现在让我们分析一个非多态性的实现。下列示例中使用了不同类型的Person对象--这是一种非常不理想的编程方式。注意,实际的Person类被省略。目前为止,我们仅关心代码调用的问题。

<ol class="dp-xml">
<li class="alt"><span><span><?php   </span></span></li>
<li class="">
<span> $</span><span class="attribute"><font color="#ff0000">name</font></span><span> = $_SESSION['name'];   </span>
</li>
<li class="alt">
<span> $</span><span class="attribute"><font color="#ff0000">myPerson</font></span><span> = Person::GetPerson($name);   </span>
</li>
<li class=""><span> switch (get_class($myPerson)){   </span></li>
<li class="alt"><span>case 'David' :   </span></li>
<li class=""><span> $myPerson->AddFeedback('Great Article!','Some Reader', date('Y-m-d'));   </span></li>
<li class="alt"><span> break;   </span></li>
<li class=""><span>case 'Charles':   </span></li>
<li class="alt"><span> $myPerson->feedback[] = array('Some Reader', 'Great Editing!');   </span></li>
<li class=""><span> break;   </span></li>
<li class="alt"><span>case 'Alejandro' :   </span></li>
<li class=""><span> $myPerson->Feedback->Append('Awesome JavaScript!');   </span></li>
<li class="alt"><span> break;   </span></li>
<li class=""><span>default :   </span></li>
<li class="alt"><span> $myPerson->AddFeedback('Yay!');   </span></li>
<li class=""><span> }   </span></li>
<li class="alt"><span>?> </span></li>
</ol>
Salin selepas log masuk

这个示例展示了行为不同的对象,还有一个switch语句用于区分不同的Person类对象,从而执行其各自相应的正确操作。注意,这里针对不同条件的回馈注释是不同的。在实际应用程序开发中可能不会出现这种情形;我仅为了简单地说明类实现中存在的区别。

下面的一个示例使用了PHP5多态性。

<ol class="dp-xml">
<li class="alt"><span><span><?php   </span></span></li>
<li class="">
<span> $</span><span class="attribute"><font color="#ff0000">name</font></span><span> = $_SESSION['name'];   </span>
</li>
<li class="alt">
<span> $</span><span class="attribute"><font color="#ff0000">myPerson</font></span><span> = Person::GetPerson($name);   </span>
</li>
<li class=""><span> $myPerson->AddFeedback('Great Article!', 'SomeReader', date('Y-m-d'));   </span></li>
<li class="alt"><span>?> </span></li>
</ol>
Salin selepas log masuk

注意,这里没有switch语句,而最重要的是,缺乏有关Person::GetPerson()会返回什么类型的对象。而另一个Person::AddFeedback()是一个多态方法。行为完全是由具体类进行封装的。请记住,在此无论我们使用的是David,Charles还是Alejandro,调用代码从不必了解具体类的功能,而仅知道基类就可以了。

尽管我的示例并不完美,但是,从调用代码的角度,它已经展示了PHP5多态性的基本用法。现在我们需要分析这些类的内部实现。从一个基类进行派生的一个最伟大的地方在于,该派生类能够存取父类的行为,这种情况常常是缺省的实现,但是也可能出现在类继承链中用于创建更为复杂的行为。下面是这种情况的一个简单展示。

<ol class="dp-xml">
<li class="alt"><span><span><?php   </span></span></li>
<li class=""><span>class Person{   </span></li>
<li class="alt"><span> function AddFeedback($comment, $sender, $date){   </span></li>
<li class=""><span>//把回馈添加到数据库   </span></li>
<li class="alt"><span> }   </span></li>
<li class=""><span>}   </span></li>
<li class="alt"><span>class David extends Person{   </span></li>
<li class=""><span> function AddFeedback($comment, $sender){   </span></li>
<li class="alt"><span>parent::AddFeedback($comment, $sender,   </span></li>
<li class=""><span>date('Y-m-d'));   </span></li>
<li class="alt"><span> }   </span></li>
<li class=""><span>}   </span></li>
<li class="alt"><span>?> </span></li>
</ol>
Salin selepas log masuk

在此,David类中的AddFeedback方法实现中首先调用了Person::AddFeedback方法。你可能注意到,它模仿了C++,Java或C#中的方法重载。请记住,这仅是一个简单化的示例,并且你编写的PHP5多态性实际代码完全依赖于你的实际工程。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446414.htmlTechArticlePHP5作为一个新版本,实现了对迟绑定的支持,不过在实际应用中,迟绑定功能还存在一些问题,比如你使用的是更旧版本的PHP,那么你可能...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Mar 24, 2024 am 11:27 AM

Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Dengan kebangkitan media sosial, WeChat telah menjadi salah satu alat komunikasi yang sangat diperlukan dalam kehidupan seharian orang ramai. Walau bagaimanapun, ramai orang mungkin menghadapi masalah: log masuk ke beberapa akaun WeChat pada masa yang sama pada telefon mudah alih yang sama. Bagi pengguna telefon mudah alih Huawei, tidak sukar untuk mencapai log masuk WeChat dwi Artikel ini akan memperkenalkan cara mencapai log masuk WeChat dwi pada telefon mudah alih Huawei. Pertama sekali, sistem EMUI yang disertakan dengan telefon mudah alih Huawei menyediakan fungsi yang sangat mudah - pembukaan dua aplikasi. Melalui fungsi pembukaan dwi aplikasi, pengguna boleh serentak

Bagaimana untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Bagaimana untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Mar 24, 2024 pm 06:03 PM

Bagaimana untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Dengan populariti perisian sosial dan penekanan yang semakin meningkat terhadap privasi dan keselamatan orang ramai, fungsi klon WeChat telah beransur-ansur menjadi tumpuan perhatian. Fungsi klon WeChat boleh membantu pengguna log masuk ke berbilang akaun WeChat pada telefon mudah alih yang sama pada masa yang sama, menjadikannya lebih mudah untuk diurus dan digunakan. Tidak sukar untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Anda hanya perlu mengikuti langkah berikut. Langkah 1: Pastikan versi sistem telefon mudah alih dan versi WeChat memenuhi keperluan Pertama, pastikan versi sistem telefon mudah alih Huawei anda telah dikemas kini kepada versi terkini, serta Apl WeChat.

Peta harta karun muncul dalam 'Zero Era'. Mari kita mencari harta karun bersama-sama dan meraikan Hari Mei! Peta harta karun muncul dalam 'Zero Era'. Mari kita mencari harta karun bersama-sama dan meraikan Hari Mei! May 03, 2024 pm 12:43 PM

Legenda "Zero Age" mengatakan bahawa pada masa dahulu ada seorang yang bakhil bernama Pan God Dia mengumpul sejumlah besar harta semasa hayatnya, tetapi selepas kematiannya harta ini juga hilang, hanya meninggalkan khabar angin bahawa Pan God membina sebuah bangunan yang besar. maze mausoleum , menyembunyikan harta karun di dalam, tetapi malangnya belum ada yang menemuinya. Hanya dengan berjudi dalam hidup anda, anda boleh mencari harta karun yang tiada tandingannya. Adakah anda berani bertaruh pada permainan ini. Jadi di manakah anda mendapatkan peta harta karun? Anda boleh mendapatkannya daripada misi perniagaan harian Terdapat tiga jenis peta harta karun: Peta harta karun Iceland, peta harta karun hutan belantara dan peta harta karun hutan hujan Anda boleh menggali harta karun dengan mencari lokasi harta karun yang ditandakan pada peta harta karun. Dan menggali harta karun secara rawak akan menemui peristiwa yang berbeza: ada kemungkinan BOSS yang menjaga harta karun akan dimaklumkan, dan BOSS akan mati.

Panduan Pengaturcaraan PHP: Kaedah untuk Melaksanakan Jujukan Fibonacci Panduan Pengaturcaraan PHP: Kaedah untuk Melaksanakan Jujukan Fibonacci Mar 20, 2024 pm 04:54 PM

Bahasa pengaturcaraan PHP ialah alat yang berkuasa untuk pembangunan web, yang mampu menyokong pelbagai logik dan algoritma pengaturcaraan yang berbeza. Antaranya, melaksanakan jujukan Fibonacci adalah masalah pengaturcaraan biasa dan klasik. Dalam artikel ini, kami akan memperkenalkan cara menggunakan bahasa pengaturcaraan PHP untuk melaksanakan jujukan Fibonacci, dan melampirkan contoh kod tertentu. Jujukan Fibonacci ialah jujukan matematik yang ditakrifkan seperti berikut: unsur pertama dan kedua bagi jujukan ialah 1, dan bermula dari unsur ketiga, nilai setiap unsur adalah sama dengan jumlah dua unsur sebelumnya. Beberapa elemen pertama urutan

Jadual fungsi maya C++ dan pelaksanaan polimorfik, bagaimana untuk mengelakkan pembaziran memori Jadual fungsi maya C++ dan pelaksanaan polimorfik, bagaimana untuk mengelakkan pembaziran memori May 31, 2024 pm 07:03 PM

Kelas asas maya mengoptimumkan overhed memori vtable dengan membenarkan warisan daripada berbilang kelas asas tanpa membuat vtable tambahan. Dalam kod yang dioptimumkan, kelas asas bentuk tidak lagi mempunyai jadual fungsi maya, dan kelas bulatan dan segi empat tepat berkongsi jadual fungsi maya yang sama, sekali gus mengurangkan penggunaan memori.

Kuasai cara Golang mendayakan kemungkinan pembangunan permainan Kuasai cara Golang mendayakan kemungkinan pembangunan permainan Mar 16, 2024 pm 12:57 PM

Dalam bidang pembangunan perisian hari ini, Golang (bahasa Go), sebagai bahasa pengaturcaraan yang cekap, ringkas dan sangat bersesuaian, semakin digemari oleh pembangun. Perpustakaan standardnya yang kaya dan ciri-ciri konkurensi yang cekap menjadikannya pilihan berprofil tinggi dalam bidang pembangunan permainan. Artikel ini akan meneroka cara menggunakan Golang untuk pembangunan permainan dan menunjukkan kemungkinan besarnya melalui contoh kod tertentu. 1. Kelebihan Golang dalam pembangunan permainan Sebagai bahasa yang ditaip secara statik, Golang digunakan dalam membina sistem permainan berskala besar.

Versi baharu 'Onmyoji' 'The Gods of Fortune Parade' akan dilancarkan, dan acara versi 'The Gods of Fortune Parade' akan datang! Versi baharu 'Onmyoji' 'The Gods of Fortune Parade' akan dilancarkan, dan acara versi 'The Gods of Fortune Parade' akan datang! Mar 30, 2024 pm 02:56 PM

Versi baharu "Onmyoji" "The Gods of Fortune Parade" akan dilancarkan pada 3 April, dan acara versi "The Gods of Fortune Parade" juga akan bermula. Datang dan bunuh raksasa laut yang menyerang, dan memulakan perjalanan ke kumpul tuah bersama - [Peristiwa Versi" "Tuangkan Dewa Nasib"] - Masa acara - Selepas penyelenggaraan pada 3 April - 23:59 pada 9 April [Pengenalan cara bermain] Acara ini termasuk: menghapuskan raksasa laut, anekdot tentang pulang dari jauh, mengumpul kekayaan, kad hadiah daripada God of Fortune, dan melawat kedai Menunggu permainan, Onmyoji dengan tahap ≥15 boleh mengklik pada cahaya pagi Ebisu di halaman atau lelaki kertas kecil di sudut kanan atas halaman untuk menyertai aktiviti tersebut. - Kalahkan Kraken - Gunakan "Taiyayaki" atau "Stamina" untuk mendapatkan ganjaran acara. Chenhui Ebisu juga akan menyertai pertempuran bersama-sama Jika anda berjaya dalam cabaran, anda akan menerima ganjaran seperti "Lucky Bubbles" dan "Lucky God Bonds". Apabila bilangan tahap pemusnahan Kraken meningkat, anda boleh mendapatkan

'Zero Era' membuka era baharu yang menggabungkan teknologi dan sihir! 'Zero Era' membuka era baharu yang menggabungkan teknologi dan sihir! Jun 02, 2024 am 09:45 AM

"Zero Era" ialah permainan dalam talian berbilang pemain fantasi masa depan 2.5D yang diwakili oleh Hip Hop Tribe Platform Ia mengambil pembinaan semula dunia pasca-apokaliptik sebagai temanya dan mempersembahkan dunia baharu yang misteri di mana sihir dan teknologi wujud bersama teknologi, automatik Permainan inovatif seperti kemahiran kreatif menunjukkan sepenuhnya budaya steampunk yang penuh dengan perubahan dan imaginasi yang tidak berkesudahan. Selain melindungi watak dan mengurangkan kerosakan yang dihadapi semasa pengembaraan, peralatan juga boleh meningkatkan potensi orang ke had, membolehkan pengembara menggunakan kekuatan yang luar biasa. Bagi pengembara, memiliki peralatan khas malah menjadi simbol identiti dan pengalaman. Peralatan dibahagikan kepada 6 tahap kualiti: biasa (putih), baik (hijau), cemerlang (biru), jarang (ungu), heroik (merah jambu), dan legenda (oren). biasa(

See all articles