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;

