本文目标:1、了解PHP中抽象类的定义;2、了解PHP中抽象类的作用;3、了解PHP中抽象类的使用场景;4、掌握PHP中抽象类的具体实现;还是按照之前一贯的思路,我们通过3W1H的方式进行学习...
本文目标: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(); ?> 运行结果为:
案例四、 实践目标: 1、要继承一个抽象类,通过关键字extends 2、抽象类的子类必须要实现抽象类中未实现的所有方法,也就是说要重写抽象类中所有abstract的方法 具体代码如下: <?php abstract class Animal{ abstract public function eat();//抽象方法 //呼吸 public function breath(){ //所有动物的呼吸方法都是一样的,就不需要使用多态了 echo "呼吸<br/>"; } } //定义猴子 class Monkey extends Animal{ } ?> 如果Monkey类继承了抽象类,但不实现里面的abstract方法,那么运行结果为:
接下来我们来实现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(); ?> 运行结果如下:
案例五、 实践目标: 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(); ?> 运行结果如下:
(六)、学以致用问题:将以下真实场景,用抽象类还原出来 小芳放学回到家中,一进家门,只见心爱的小狗“小爱”马上就对主人摇起了尾巴,小芳笑了笑,走过去,抱起了小狗,最后,小芳和小狗亲了一口 思路分析: 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中抽象类的定义,作用以及具体的实现 希望本文能给大家带来一定的帮助,谢谢!!! 以上就是PHP面向对象之抽象类详解(代码实例)的详细内容,更多请关注模板之家(www.mb5.com.cn)其它相关文章! |