PHP 抽象类
时间:2018-11-15 15:15:25 来源:igfitidea点击:
在本教程中,我们将学习PHP的抽象类和抽象方法,以及如何使用抽象类来定义类的层次结构框架。
抽象方法和抽象类介绍
在继承层次结构中,子类实现特定的细节,而父类定义了框架。父类还提供将由其子类实现的公共方法的模板。为了使父类更加通用和抽象,PHP提供了抽象方法和抽象类
。
抽象方法是没有实现的方法。要创建抽象方法,你可以使用abstract关键字。如下所示:
abstract public function abstractMethod();
抽象类是至少包含一个抽象方法的类。要声明抽象类,一样也是使用abstract关键字,如下所示:
<?php abstract class abstractClass{ abstract public function abstractMethod(); //.. 其他方法和属性 }
PHP抽象类示例
让我们看一个例子来了解抽象类和抽象方法是如何工作的。我们将基于以下结构开发新类:
<?php abstract class Person{ protected $firstName; protected $lastName; public function __construct($firstName,$lastName){ $this->firstName = $firstName; $this->lastName = $lastName; } public function __toString(){ return sprintf("%s, %s",$this->lastName, $this->firstName); } abstract public function getSalary(); }
抽象类无法被实例化。换句话说,不允许创建一个抽象类的新实例,例如,下面的代码是不允许的:
$p = new Person('Alice','theITroad');
抽象类可以包含属性,比如$firstname和$lastname等。
抽象类可以包含已经实现完成的方法,比如:__tostring()方法。
抽象类允许您声明一个部分功能已经实现了的类。而抽象方法则由子类来实现。
继承自抽象类的类被称为具体类,例如Employee类和Contractor类就是具体类。
<?php require_once 'classes/person.php'; class Employee extends Person { private $salary; public function __construct($firstName, $lastName, $salary) { parent::__construct($firstName, $lastName); $this->salary = $salary; } public function getSalary() { return $salary; } public function __toString() { return sprintf("Name: %s<br> Salary: $%0.2f", parent::__toString(), $this->salary); } }
下面代码演示了如何使用Employee类:
<?php require_once 'classes/employee.php'; $e = new Employee('Alice','theITroad',3000); echo $e;
我们现在可以开发另一个具体类Contractor:
<?php require_once 'classes/person.php'; class Contractor extends Person { private $rate; private $billableHours; public function __construct($firstName, $lastName, $rate, $billableHours) { parent::__construct($firstName, $lastName); $this->rate = $rate; $this->billableHours = $billableHours; } public function getSalary() { return $this->rate * $this->billableHours; } public function __toString() { return sprintf("姓名:%s<br>薪水:$%0.2f", parent::__toString(), $this->getSalary()); } }
使用Contractor类的示例代码:
<?php require_once 'classes/contractor.php'; $c = new Contractor('MStech', 'Bill', 55, 170); echo $c;