PHP面向对象之接口详解(代码实例)
本文目标:
1、了解PHP中接口的定义
2、了解PHP中接口的作用
3、了解PHP中接口的使用场景
4、了解PHP中接口的具体实现
还是承袭之前一贯的学习思路,我们学习一个知识,还是根据3w1h的思路来学习
(一)、了解PHP中接口的定义(What)
定义:接口就是把不同类的 <span style="background-color: rgb(255, 0, 0); color: rgb(255, 255, 255); border: 1px solid rgb(0, 0, 0);">共同行为</span>
<span style="color: rgb(0, 0, 0);"> </span>
<span style="color: rgb(0, 0, 0);">进行了定义,然后在不同的类里面实现不同的功能</span>
<span style="color: rgb(0, 0, 0);"> 或者我们可以理解成它是对事物的一种统一规范,它规定了某个事物必须有哪些行为,比如人这个接口,它就规定了人必须要具备的一些方法,比如吃、喝、拉、撒、走路<span style="color: rgb(0, 0, 0); font-family: monospace;">、</span>说话<span style="color: rgb(0, 0, 0); font-family: monospace;">、</span>眨眼睛<span style="color: rgb(0, 0, 0); font-family: monospace;">、</span>睡觉<span style="color: rgb(0, 0, 0); font-family: monospace;">、</span>思考等,缺少任何一个行为都不是一个正常的人了</span>
(二)、了解PHP中接口的作用(Why)
作用:
1、规范代码:定义接口有利于代码的规范:特别是对于一些大型项目而言,有了统一的接口后,一方面开发人员能有一个清晰的认识,一看接口就知道他们具体要实现哪些业务;同时也能防止由于开发人员随意命名而导致的命名不清晰和代码混乱,影响开发效率。
2、提高的代码的可维护性:比如你要做一个分销商城程序,其中里面有一个分销类,主要负责分销功能,刚开始的时候你可能会把你刚开始想到的一些分销功能都封装到这个分销类里面。可是随着时间的推移,你之后可能会发现现有的类已经不能够满足你的新的需求,然后你就需要重新设计这个类,但是最坏的情况是你会发现此刻这个类好像根本就没什么用了,但是代码的其他地方有可能还会引用这个类,如果完全去修改,会导致非常麻烦。但是如果一开始你把它定义成一个接口,把分销的一些主要功能放在接口里,然后再另外定义一个分销类时去具体的实现这些接口,然后你只需要用这个接口去引用已经实现这个接口的相关的类就可以了,就算以后要换的话只不过是引用另一个类而已,这样就可以提高代码的可维护性和可拓展性。
3、让代码更具备高内聚,低耦合的原则
(三)、了解PHP中接口的使用场景(Where)
场景:结合它的作用,使用场景基本上如下
1、如果为了保证一个类更具规范性,我们可以为这个类定义一个接口,那么所有继承这个接口的所有类,都必须要实现接口里定义的方法
2、如果希望提高代码的可维护性,可重用性和可扩展性,我们也可以考虑它,特别是在参与开发大型项目的时候,一定要先考虑好,哪些接口需要先定义好,这样就等同于先把规范确定好了,规范确定好了,分工合作的时候,效率才会提升
(四)、了解PHP中接口的具体实现(How)
总结:
1、接口的定义 interface 接口名称{ }
2、接口里面的方法 是没有{},也就是说里面的方法是没有具体的实现部分
3、类实现接口的定义 通过关键字implements,比如 class A implements 接口{}
4、类一旦要实现某个接口,就必须要实现接口定义好的所有方法
5、接口不能被实例化
6、通过instanceof 来判断某个类的实例是不是实现了一个接口,比如A对象实例 instanceof B接口
如果返回true,就表示A对象实例对应的类 是实现了B接口
7、通过extends可以让一个接口 继承 另外一个接口
8、当一个类要实现一个子接口时,它不仅要实现子接口里面的方法,同时也要实现父接口的所有方法
每个总结都是通过实践得来的,下面我们一一来通过具体的代码来演示上面的总结
(五)、具体代码
1、案例一
实践目标:
1、接口的定义 interface 接口名称{ }
2、接口里面的方法 是没有{},也就是说里面的方法是没有具体的实现部分
<?php //接口定义 interface Action{ public function eat(); public function walk(); public function sleep(); } ?>
运行结果:是空白的说明没有报错
2、案例二
实践目标:
1、类要实现一个接口的定义 通过关键字implements,比如 class A implements 接口{}
2、类一旦要实现某个接口,就必须要实现接口定义好的所有方法
<?php //接口定义 interface Action{ public function eat(); public function walk(); public function sleep(); } //定义实现接口的类 class Monkey implements Action{ //一旦要实现一个接口,就必须要实现接口里面的所有方法 public function eat(){} public function walk(){} public function sleep(){} } $monkey = new Monkey(); ?>
没有实现接口的方法的运行结果为:
Fatal error: Class Monkey contains 3 abstract methods and must therefore be declared abstract or implement the remaining methods (Action::eat, Action::walk, Action::sleep) in D:\E-class\class-code\classing\index.php on line 11
实现了接口的运行结果为:
空白说明是正确的
3、案例三
实践目标:
1、接口不能被实例化
<?php //接口定义 interface Action{ public function eat(); public function walk(); public function sleep(); } $action = new Action(); ?>
运行结果为:
Fatal error: Uncaught Error: Cannot instantiate interface Action in D:\E-class\class-code\classing\index.php:9 Stack trace: #0 {main} thrown in D:\E-class\class-code\classing\index.php on line 9
4、案例四
实践目标:
1、通过instanceof 来判断某个类的实例是不是实现了一个接口,比如A对象实例 instance of B接口
如果返回true,就表示A对象实例对应的类 是实现了B接口
<?php //接口定义 interface Action{ public function eat(); public function walk(); public function sleep(); } //定义实现接口的类 class Monkey implements Action{ public function eat(){} public function walk(){} public function sleep(){} } $monkey = new Monkey(); print_r( $monkey instanceof Action ); ?>
运行结果为:1
5、案例五
实践目标:
1、通过extends可以让一个接口 继承 另外一个接口
<?php //接口定义 interface Action{ public function eat(); public function walk(); public function sleep(); } //接口继承 interface HigherAction extends Action{ public function talk(); public function think(); } ?>
6、案例六
实践目标:
1、当一个类要实现一个子接口时,它不仅要实现子接口里面的方法,同时也要实现父接口的所有方法
<?php //接口定义 interface Action{ public function eat(); public function walk(); public function sleep(); } //接口继承 interface HigherAction extends Action{ public function talk(); public function think(); } //定义实现子接口的类 class Human implements HigherAction{ public function eat(){} public function talk(){} public function walk(){} public function sleep(){} public function think(){} } $human = new Human(); ?>
当Human类只实现HigherAction的2个方法的时候,运行结果为:
Fatal error: Class Human contains 3 abstract methods and must therefore be declared abstract or implement the remaining methods (HigherAction::think, Action::walk, Action::sleep) in D:\E-class\class-code\classing\index.php on line 14
当Human类实现了HigherAction和Action的所有方法的时候,运行结果为:
空白,说明是正确的
(六)、学以致用
问题:分销系统想必对很多人来说都不陌生,但是分销系统也有很多种类,比如常见的不违法有2级分销,稍微有点违法的就是3级分销,其实还有更多繁杂的分销系统,但是不管是哪种分销系统,他们都有类似的方法,我们希望把这些方法做成一个接口,然后具体怎么实现,就交由2级分销和3级分销2个类,怎么做?
思路分析:
1、先想好分销的公共方法
2、把这些方法封装到分销接口中
3、定义2个类,让这2个类分别去实现这个分销接口
具体代码:
<?php //分销接口定义 interface Commission{ //获取会员的直接上级 public function getParent($uid); //获取会员的当期级别 public function getLevel($uid); //获取会员的累计佣金 public function getTotalCommission($uid); //获取会员当期可提现佣金 public function getCurrCommission($uid); //获取会员的累计提现佣金 public function getTotalApplyPrice($uid); } //2级分销 class TwoLevelCommission implements Commission{ //获取会员的直接上级 public function getParent($uid){} //获取会员的当期级别 public function getLevel($uid){} //获取会员的累计佣金 public function getTotalCommission($uid){} //获取会员当期可提现佣金 public function getCurrCommission($uid){} //获取会员的累计提现佣金 public function getTotalApplyPrice($uid){} } //3级分销 class ThreeLevelCommission implements Commission{ //获取会员的直接上级 public function getParent($uid){} //获取会员的当期级别 public function getLevel($uid){} //获取会员的累计佣金 public function getTotalCommission($uid){} //获取会员当期可提现佣金 public function getCurrCommission($uid){} //获取会员的累计提现佣金 public function getTotalApplyPrice($uid){} } ?>
(七)、总结
1、本文主要是讲了接口的定义和作用以及实现
希望本文能给大家带来一定的帮助,谢谢!!!
Atas ialah kandungan terperinci PHP面向对象之接口详解(代码实例). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Cara menggunakan bahasa Go untuk melaksanakan pengaturcaraan dipacu peristiwa berorientasikan objek Pengenalan: Paradigma pengaturcaraan berorientasikan objek digunakan secara meluas dalam pembangunan perisian, dan pengaturcaraan dipacu peristiwa ialah model pengaturcaraan biasa yang merealisasikan aliran program melalui pencetusan dan pemprosesan peristiwa. Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk melaksanakan pengaturcaraan dipacu peristiwa berorientasikan objek dan memberikan contoh kod. 1. Konsep pengaturcaraan dipacu peristiwa Pengaturcaraan dipacu acara ialah model pengaturcaraan berdasarkan peristiwa dan mesej, yang memindahkan kawalan aliran program kepada pencetus dan pemprosesan peristiwa. dalam acara didorong

Anotasi @JsonIdentityInfo digunakan apabila objek mempunyai hubungan ibu bapa-anak dalam perpustakaan Jackson. Anotasi @JsonIdentityInfo digunakan untuk menunjukkan identiti objek semasa bersiri dan penyahsirilan. ObjectIdGenerators.PropertyGenerator ialah kelas ruang letak abstrak yang digunakan untuk mewakili situasi di mana pengecam objek yang akan digunakan berasal daripada sifat POJO. Syntax@Target(value={ANNOTATION_TYPE,TYPE,FIELD,METHOD,PARAMETER})@Retention(value=RUNTIME)public

Bahasa Go menyokong pengaturcaraan berorientasikan objek melalui definisi jenis dan perkaitan kaedah. Ia tidak menyokong warisan tradisional, tetapi dilaksanakan melalui gubahan. Antara muka menyediakan ketekalan antara jenis dan membenarkan kaedah abstrak ditakrifkan. Kes praktikal menunjukkan cara menggunakan OOP untuk mengurus maklumat pelanggan, termasuk mencipta, mendapatkan, mengemas kini dan memadam operasi pelanggan.

Bahasa Go menyokong pengaturcaraan berorientasikan objek, mentakrifkan objek melalui struct, mentakrifkan kaedah menggunakan penerima penunjuk, dan melaksanakan polimorfisme melalui antara muka. Ciri berorientasikan objek menyediakan penggunaan semula kod, kebolehselenggaraan dan enkapsulasi dalam bahasa Go, tetapi terdapat juga pengehadan seperti kekurangan konsep tradisional kelas dan pewarisan dan hantaran tandatangan kaedah.

Amalan terbaik OOP dalam PHP termasuk konvensyen penamaan, antara muka dan kelas abstrak, pewarisan dan polimorfisme, dan suntikan kebergantungan. Kes praktikal termasuk: menggunakan mod gudang untuk mengurus data dan menggunakan mod strategi untuk melaksanakan pengisihan.

Menganalisis Corak Flyweight dalam Pengaturcaraan Berorientasikan Objek PHP Dalam pengaturcaraan berorientasikan objek, corak reka bentuk ialah kaedah reka bentuk perisian yang biasa digunakan, yang boleh meningkatkan kebolehbacaan, kebolehselenggaraan dan kebolehskalaan kod. Corak flyweight ialah salah satu corak reka bentuk yang mengurangkan overhed memori dengan berkongsi objek. Artikel ini akan meneroka cara menggunakan mod flyweight dalam PHP untuk meningkatkan prestasi program. Apakah mod flyweight? Corak flyweight ialah corak reka bentuk struktur yang tujuannya adalah untuk berkongsi objek yang sama antara objek yang berbeza.

Tiada konsep kelas dalam erti kata tradisional dalam Golang (bahasa Go), tetapi ia menyediakan jenis data yang dipanggil struktur, yang melaluinya ciri berorientasikan objek yang serupa dengan kelas boleh dicapai. Dalam artikel ini, kami akan menerangkan cara menggunakan struktur untuk melaksanakan ciri berorientasikan objek dan menyediakan contoh kod konkrit. Definisi dan penggunaan struktur Pertama, mari kita lihat definisi dan penggunaan struktur. Di Golang, struktur boleh ditakrifkan melalui kata kunci jenis dan kemudian digunakan di mana perlu. Struktur boleh mengandungi atribut

C# (CSharp) ialah bahasa pengaturcaraan berorientasikan objek yang berkuasa dan popular yang digunakan secara meluas dalam bidang pembangunan perisian. Semasa proses pembangunan C#, adalah sangat penting untuk memahami konsep asas dan prinsip reka bentuk pengaturcaraan berorientasikan objek (OOP). Pengaturcaraan berorientasikan objek ialah paradigma pengaturcaraan yang mengabstraksi perkara di dunia nyata menjadi objek dan melaksanakan fungsi sistem melalui interaksi antara objek. Dalam C#, kelas ialah blok binaan asas pengaturcaraan berorientasikan objek dan digunakan untuk menentukan sifat dan tingkah laku objek. Apabila membangunkan C#, terdapat beberapa prinsip reka bentuk yang penting
