像抽象类一样,也有抽象方法。我们使用abstract关键字声明抽象方法和抽象类。在本主题中,我们将学习 PHP 中的抽象类。
开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
根据继承的概念,父类由派生类扩展。父类中的方法由派生类实现或定义。 PHP 通过使用抽象类和抽象方法,让父类变得更加具体。
抽象类强制包含一个抽象方法。此外,这个抽象类还可以有其他非抽象方法。
语法
抽象类的语法,其中一个方法为抽象。
abstract class DemoAbstractClass() { abstract public function DemoAbstractMethod(); }
抽象方法
abstract public function DemoAbstractMethod();
本文将学习抽象类的工作原理,它是这样的。
现在,我们知道抽象类必须有一个抽象方法。
也可以有非抽象方法。抽象方法只有基类中的声明。这意味着它只有名称和参数,没有其他代码。
为了进一步定义该方法并使用该方法,需要在扩展基类的派生类中实现该方法。另外,请记住,该抽象类无法实例化来创建对象,但可以实例化基类派生的类来创建对象。
以下是 PHP 中抽象类的一些示例
在下面的程序中,我们了解创建抽象类的对象时会发生什么。
抽象类 Student 被创建,其中包含 Student 类的一个抽象方法 favouriteSubject() 方法和另外两个非抽象方法,如 setRollNo() 和 getRollNO() ,它们设置和获取学生的角色,这是通过创建对象来完成的派生类(扩展基类)。
代码:
<?php abstract class Student { protected $m; public function setRollNo($rollno) { return $this->m = $rollno; } public function getRollNo() { return $this->m; } abstract public function favouriteSubject() } class Radha extends Student { public function favouriteSubject() { return "English"; } } $obj = new Student; //this statement throws error as we cannot create object of class Student as it is defined as abstract $obj = new Radha; //this statement does not throws error and executes correctly $obj->favouriteSubject(); ?>
输出:
在程序输出以及此示例中的代码之后,将在下面逐步解释此示例。
代码
abstract class Student{ protected $m; abstract public function calulatePercentage(); public function setMarks($marks) { return $this->m = $marks; } public function favoriteSubject() { return 'Favorite subject is English'; } } class Ram extends Student{ public function calulatePercentage(){ $percentage = ($this->m /100 ) * 100; return 'The percentage of Ram is '.$percentage. '%' .'<br>'; } } class Sherry extends Student{ public function calulatePercentage(){ $percentage = ($this->m /100 ) * 100; return 'The percentage of Sherry is '.$percentage. '%' .'<br>'; } public function favoriteSubject() { return 'Favorite subject is Maths'; } } $ram = new Ram(); $ram->setMarks(92); echo $ram->calulatePercentage(); echo $ram->favoriteSubject(); echo '<hr>'; $sherry = new Sherry(); $sherry->setMarks(97); echo $sherry->calulatePercentage(); echo $sherry->favoriteSubject();
输出:
抽象类可以称为派生类的骨架。在上面的示例中,我们声明了抽象类 Student 和一个名为 $m 的属性,用于表示学生的分数。
示例 #2 的解释
abstract class Student { abstract public function calulatePercentage(); }
抽象类可以称为派生类的骨架。在此示例中,我们声明了抽象类和方法以及其他方法。
在上面的示例中,我们声明了抽象类 Students,并使用抽象方法来计算学生的百分比以及给出的分数。
此外,我们还创建了方法(不是抽象的)来设置学生的分数并获取学生最喜欢的科目。
abstract class Student{ abstract public function calulatePercentage(); public function setMarks($marks) { return $this->m = $marks; } public function favoriteSubject() { return 'Favorite subject is English'; } }
要创建抽象类 Student 的对象,我们必须扩展 Student 类并从中创建派生类。基类使用extends关键字来允许基类扩展。扩展类后,我们现在可以使用基类方法。
在上面的示例中,Ram 是扩展基类 Student 的派生类。它使用了extends关键字。现在我们已经计算了percentage()方法来计算Ram获得的分数的百分比。
class Ram extends Student{ public function calulatePercentage(){ $percentage = ($this->m /100 ) * 100; return 'The percentage of Ram is '.$percentage. '%' .'<br>'; } }
再声明一个类,扩展基类 Student 以便我们了解更多信息。
在上面的示例中,我们创建了 Sherry 作为从基类 Student 创建的派生类。这使用了扩展关键字。它有两个功能:抽象,基类中的 calulatePercentage() 方法,另一个是 favoriteSubject() 方法,该方法不是抽象的。
class Sherry extends Student{ public function calulatePercentage(){ $percentage = ($this->m /100 ) * 100; return 'The percentage of Sherry is '.$percentage. '%' .'<br>'; } public function favoriteSubject() { return 'Favorite subject is Maths'; } }
现在我们创建基类的对象和派生类的对象,这会抛出错误。因为我们无法实例化,所以该类被声明为抽象类。
因此只能创建派生类的对象。完成此操作后,使用此对象,我们将调用抽象方法而不是抽象方法,如下所示。
$ram = new Ram(); $ram->setMarks(92); echo $ram->calculatePercentage(); echo $ram->favoriteSubject(); echo '<hr>'; $sherry = new Sherry(); $sherry->setMarks(97); echo $sherry->calculatePercentage(); echo $sherry->favoriteSubject();
In this article, I hope you learned about how the abstract class is declared, how it works, how it is extended using extends keywords, how the abstract method is declared in the base class and how it is implemented in the derived class. The examples explained will help you learn the concept at ease. I hope it was prepared to be useful enough to grasp and practice more.
以上是PHP 中的抽象类的详细内容。更多信息请关注PHP中文网其他相关文章!