继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

PHP 抽象类与接口特点对比

DemiMurphy
关注TA
已关注
手记 6
粉丝 12
获赞 155
PHP抽象类

除了常规的类,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();
?>
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP