PHP面向对象之抽象类详解(代码实例)
本文目标:
1、了解PHP中抽象类的定义
2、了解PHP中抽象类的作用
3、了解PHP中抽象类的使用场景
4、掌握PHP中抽象类的具体实现
还是按照之前一贯的思路,我们通过3W1H的方式进行学习,那么首先我们来了解一下
(一)、了解PHP中抽象类的定义(What)
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。通常在编程语句中用 abstract 修饰的类是抽象类。
和接口的不同之处在于,接口中的方法都是不实现的,只是单纯的定义,但是抽象类中的方法是可以实现的。
(二)、了解PHP中抽象类的作用(Why)
在PHP中的类当中,有很多类会被不断的重写,这个时候我们可以使用抽象类,怎么做呢?就是先写一个公共的类,然后实例化之后我们可以重复去调用。这样可以提高代码的可重用性
(三)、了解PHP中抽象类的使用场景(Where)
1、如果发现代码中很多类都有相似或者共同的方法,我们可以把这些相同或者相似的方法抽离出来,封装到抽象类中。
抽象类和接口有点相似,可以这么说,接口是一个特殊的抽象类,只不过接口里面全都是抽象的方法,(所谓抽象就是没有具体的实现),但是抽象类中的部分方法,是可以具备实现的功能,
(四)、掌握PHP中抽象类的具体实现(How)
总结:
1、抽象类的定义通过abstract 定义,比如abstract class 类名{}
2、抽象类的方法的定义也是通过abstract定义,比如abstract public function 方法名(){}
3、抽象类是不能被实例化的
4、要继承一个抽象类,通过关键字extends
5、抽象类的子类必须要实现抽象类中未实现的所有方法,也就是说要重写抽象类中所有abstract的方法
6、抽象类的子类虽然没有实现抽象类中的已经实现的方法,一样可以调用这些方法,其实结合继承我们可以很好理解这点
每个总结都是通过实践得出来的,现在我们用实践来演示总结,这样可以促进理解,让每个总结理解起来更加清晰,直观
(五)、具体代码
案例一、
实践目标:
1、抽象类的定义通过abstract 定义,比如abstract class 类名{}
2、抽象类的方法的定义也是通过abstract定义,比如abstract public function 方法名(){}
具体代码如下:
<?php abstract class Animal{ abstract public function eat();//抽象方法 //呼吸 public function breath(){ //所有动物的呼吸方法都是一样的,就不需要使用多态了 echo "呼吸<br/>"; } } ?>
案例二、
实践目标:
1、抽象类是不能被实例化的
具体代码如下:
<?php abstract class Animal{ abstract public function eat();//抽象方法 //呼吸 public function breath(){ //所有动物的呼吸方法都是一样的,就不需要使用多态了 echo "呼吸<br/>"; } } $animal = new Animal(); ?>
运行结果为:
Fatal error: Uncaught Error: Cannot instantiate abstract class Animal in D:\E-class\class-code\classing\index.php:10 Stack trace: #0 {main} thrown in D:\E-class\class-code\classing\index.php on line 10
案例四、
实践目标:
1、要继承一个抽象类,通过关键字extends
2、抽象类的子类必须要实现抽象类中未实现的所有方法,也就是说要重写抽象类中所有abstract的方法
具体代码如下:
<?php abstract class Animal{ abstract public function eat();//抽象方法 //呼吸 public function breath(){ //所有动物的呼吸方法都是一样的,就不需要使用多态了 echo "呼吸<br/>"; } } //定义猴子 class Monkey extends Animal{ } ?>
如果Monkey类继承了抽象类,但不实现里面的abstract方法,那么运行结果为:
Fatal error: Class Monkey contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Animal::eat) in D:\E-class\class-code\classing\index.php on line 13
接下来我们来实现abstract方法
具体代码如下:
<?php abstract class Animal{ abstract public function eat();//抽象方法 //呼吸 public function breath(){ //所有动物的呼吸方法都是一样的,就不需要使用多态了 echo "呼吸<br/>"; } } //定义猴子 class Monkey extends Animal{ //实现抽象类中的抽象方法 public function eat(){ echo "我是猴子类中的eat方法<br/>"; } } $monkey = new Monkey(); $monkey->eat(); ?>
运行结果如下:
我是猴子类中的eat方法
案例五、
实践目标:
1、抽象类的子类虽然没有实现抽象类中的已经实现的方法,一样可以调用这些方法,其实结合继承我们可以很好理解这点
具体代码如下:
<?php abstract class Animal{ abstract public function eat();//抽象方法 //呼吸 public function breath(){ //所有动物的呼吸方法都是一样的,就不需要使用多态了 echo "抽象类中的呼吸方法<br/>"; } } //定义猴子 class Monkey extends Animal{ //实现抽象类中的抽象方法 public function eat(){ echo "我是猴子类中的eat<br/>"; } } $monkey = new Monkey(); $monkey->eat(); $monkey->breath(); ?>
运行结果如下:
我是猴子类中的eat
抽象类中的呼吸方法
(六)、学以致用
问题:将以下真实场景,用抽象类还原出来
小芳放学回到家中,一进家门,只见心爱的小狗“小爱”马上就对主人摇起了尾巴,小芳笑了笑,走过去,抱起了小狗,最后,小芳和小狗亲了一口
思路分析:
1、对象分析:学生,小狗
2、对象属性分析:结合(现实世界+具体场景)
学生:名称
狗:名称
3、对象方法分析:结合(现实世界+具体场景)
学生:
(1)、放学
(2)、回到家中
(3)、走路
(4)、看
(5)、笑
(6)、抱东西
(7)、亲嘴
狗:
(1)、看
(2)、摇尾巴
(3)、亲嘴
4、我们发现这2个对象都有相似的方法,看,亲嘴,所以我们可以把它们封装到抽象类中,并且这2个方法不需要子类去重写,因为都是一样的
具体代码如下:
<?php abstract class Animal{ //看 public function look($obj){ //所有动物的呼吸方法都是一样的,就不需要使用多态了 echo "看见了".$obj->name."<br/>"; } //亲嘴 public function kiss($fromobj,$toobj){ echo $fromobj->name."亲了".$toobj->name."一口<br/>"; } } //学生 class Student extends Animal{ public $name = ""; public function __construct( $name ){ $this->name = $name; } // 1、放学 public function offschool(){ echo $this->name."放学了<br/>"; } //回家 public function goHome(){ echo $this->name."回到家中<br/>"; } // 2、走路 public function walk(){ echo $this->name."走了过去<br/>"; } // 3、看 // 4、笑 public function smile(){ echo $this->name."微笑了<br/>"; } // 5、抱东西 public function hug($obj){ echo $this->name."抱起了".$obj->name."<br/>"; } // 6、亲嘴 } //狗 class Dog extends Animal{ public $name = ""; public function __construct( $name ){ $this->name = $name; } //1、看 //2、摇尾巴 public function wagTail(){ echo $this->name."摇了尾巴<br/>"; } //3、亲嘴 } //创建对象 $xf = new Student("小芳"); $dog = new Dog("小爱"); //小芳放学了 $xf->offschool(); //小芳放学回到家中,一进家门,只见心爱的小狗“小爱”马上就对主人摇起了尾巴,小芳笑了笑,走过去, //抱起了小狗,最后,小芳和小狗亲了一口 //小芳回答家中 $xf->goHome(); //小芳看见小狗 $xf->look($dog); //小狗摇尾巴 $dog->wagTail(); //小芳笑了笑 $xf->smile(); //小芳走过去 $xf->walk(); //抱起小狗 $xf->hug($dog); //小芳亲了小狗 $xf->kiss($xf,$dog); //小狗也亲了小芳 $dog->kiss($dog,$xf); ?>
运行结果为:
小芳放学了
小芳回到家中
看见了小爱
小爱摇了尾巴
小芳微笑了
小芳走了过去
小芳抱起了小爱
小芳亲了小爱一口
小爱亲了小芳一口
(七)、总结
1、本文主要讲解了PHP中抽象类的定义,作用以及具体的实现
希望本文能给大家带来一定的帮助,谢谢!!!
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

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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

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.

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.

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

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.

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.

Dengan menguasai status objek penjejakan, menetapkan titik putus, pengecualian penjejakan dan menggunakan sambungan xdebug, anda boleh menyahpepijat kod pengaturcaraan berorientasikan objek PHP dengan berkesan. 1. Jejak status objek: Gunakan var_dump() dan print_r() untuk melihat atribut objek dan nilai kaedah. 2. Tetapkan titik putus: Tetapkan titik putus dalam persekitaran pembangunan, dan penyahpepijat akan berhenti seketika apabila pelaksanaan mencapai titik putus, menjadikannya mudah untuk menyemak status objek. 3. Pengecualian jejak: Gunakan blok try-catch dan getTraceAsString() untuk mendapatkan jejak tindanan dan mesej apabila pengecualian berlaku. 4. Gunakan penyahpepijat: Fungsi xdebug_var_dump() boleh memeriksa kandungan pembolehubah semasa pelaksanaan kod.
