除了常规的类,PHP还提供了抽象类,抽象类特点如下:
- 抽象类中声明的抽象方法,其子类必须实现
- 抽象类可以存在具体方法和具体属性,也可以只包含具体方法
- 抽象类不能实例化,只能由具体类继承抽象类的接口和具体属性
- 一个类至少有一个抽象方法,它必然是一个抽象类
<?php
/**
* abstract classes
*/
abstract class Fruit
{
protected $fruitName;
protected $fruitColor;
//强制要求子类实现的方法
abstract protected function getFruitName();
abstract protected function setFruitName($name);
abstract protected function getFruitColor();
abstract protected function setFruitColor($color);
function showFruit()
{
echo "FruitName:" . $this->getFruitName() . "\n";
echo "FruitColor:" . $this->getFruitColor() . "\n";
}
}
class Apple extends Fruit
{
function __construct($name, $color)
{
$this->setFruitName($name);
$this->setFruitColor($color);
$this->showFruit();
}
protected function getFruitName()
{
return $this->fruitName;
}
protected function setFruitName($name)
{
$this->fruitName = $name;
}
protected function getFruitColor()
{
return $this->fruitColor;
}
protected function setFruitColor($color)
{
$this->fruitColor = $color;
}
}
$apple = new Apple('Apple', 'Red');
?>
PHP 接口
OOP和设计模式的另一个重要组成是接口,接口的特点如下:
- 实现接口必须要实现接口定义的所有方法
- 接口使用 interface 操作符创建
- 接口使用 implements 操作符实现
- 可以使用双冒号操作符存取常量
- 接口定义的方法都必须是公有的
- 接口也可以继承,通过使用extends操作符
<?php
interface IConnection
{
const HOST = "localhost";
const USER = "root";
const DBNAME = "ancmf";
const PASSWD = "123456";
function testConnection();
}
class MySQLConnection implements IConnection
{
//使用作用域解析操作符
private $user = IConnection::USER;
private $servre = IConnection::HOST;
private $database = IConnection::DBNAME;
private $password = IConnection::PASSWD;
function testConnection()
{
$connect = new mysqli($this->servre, $this->user, $this->password, $this->database);
if (mysqli_connect_error()) {
die('bad connect');
}
echo "connect success";
$connect->close();
}
}
$mysqlConnection = new MySQLConnection();
$mysqlConnection->testConnection();
?>