本文目标:
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!

PHP kekal sebagai alat yang kuat dan digunakan secara meluas dalam pengaturcaraan moden, terutamanya dalam bidang pembangunan web. 1) PHP mudah digunakan dan diintegrasikan dengan lancar dengan pangkalan data, dan merupakan pilihan pertama bagi banyak pemaju. 2) Ia menyokong penjanaan kandungan dinamik dan pengaturcaraan berorientasikan objek, sesuai untuk membuat dan mengekalkan laman web dengan cepat. 3) Prestasi PHP dapat ditingkatkan dengan caching dan mengoptimumkan pertanyaan pangkalan data, dan komuniti yang luas dan ekosistem yang kaya menjadikannya masih penting dalam timbunan teknologi hari ini.

Dalam PHP, rujukan lemah dilaksanakan melalui kelas lemah dan tidak akan menghalang pemungut sampah daripada menebus objek. Rujukan lemah sesuai untuk senario seperti sistem caching dan pendengar acara. Harus diingat bahawa ia tidak dapat menjamin kelangsungan hidup objek dan pengumpulan sampah mungkin ditangguhkan.

Kaedah \ _ \ _ membolehkan objek dipanggil seperti fungsi. 1. Tentukan kaedah \ _ \ _ supaya objek boleh dipanggil. 2. Apabila menggunakan sintaks $ OBJ (...), PHP akan melaksanakan kaedah \ _ \ _ invoke. 3. Sesuai untuk senario seperti pembalakan dan kalkulator, meningkatkan fleksibiliti kod dan kebolehbacaan.

Serat diperkenalkan dalam Php8.1, meningkatkan keupayaan pemprosesan serentak. 1) Serat adalah model konkurensi ringan yang serupa dengan coroutine. 2) Mereka membenarkan pemaju mengawal aliran pelaksanaan tugas secara manual dan sesuai untuk mengendalikan tugas I/O-intensif. 3) Menggunakan serat boleh menulis kod yang lebih cekap dan responsif.

Komuniti PHP menyediakan sumber dan sokongan yang kaya untuk membantu pemaju berkembang. 1) Sumber termasuk dokumentasi rasmi, tutorial, blog dan projek sumber terbuka seperti Laravel dan Symfony. 2) Sokongan boleh didapati melalui saluran StackOverflow, Reddit dan Slack. 3) Trend pembangunan boleh dipelajari dengan mengikuti RFC. 4) Integrasi ke dalam masyarakat dapat dicapai melalui penyertaan aktif, sumbangan kepada kod dan perkongsian pembelajaran.

PHP dan Python masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1.Php sesuai untuk pembangunan web, dengan sintaks mudah dan kecekapan pelaksanaan yang tinggi. 2. Python sesuai untuk sains data dan pembelajaran mesin, dengan sintaks ringkas dan perpustakaan yang kaya.

PHP tidak mati, tetapi sentiasa menyesuaikan diri dan berkembang. 1) PHP telah menjalani beberapa lelaran versi sejak tahun 1994 untuk menyesuaikan diri dengan trend teknologi baru. 2) Ia kini digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan bidang lain. 3) Php8 memperkenalkan pengkompil JIT dan fungsi lain untuk meningkatkan prestasi dan pemodenan. 4) Gunakan OPCACHE dan ikut piawaian PSR-12 untuk mengoptimumkan prestasi dan kualiti kod.

Masa depan PHP akan dicapai dengan menyesuaikan diri dengan trend teknologi baru dan memperkenalkan ciri -ciri inovatif: 1) menyesuaikan diri dengan pengkomputeran awan, kontena dan seni bina microservice, menyokong Docker dan Kubernetes; 2) memperkenalkan pengkompil JIT dan jenis penghitungan untuk meningkatkan prestasi dan kecekapan pemprosesan data; 3) Berterusan mengoptimumkan prestasi dan mempromosikan amalan terbaik.


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

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.