17-1抽象类是什么–PHP实战开发教程

17-1抽象类是什么–PHP实战开发教程

磨阶覆偏贰蝎恢废咸凡还酞哇


新建17目录 在17下新建demo1.php

17-1抽象类是什么–PHP实战开发教程第1张

代码:

<?php
/**
 * 抽象类
 */
class Fruits
{
    protected  $name;

    public function __construct($name)
    {
        $this->name=$name;
    }

    public function eat()
    {
        return $this->name."是可以生吃的";
    }
}

$obj=new Fruits('苹果');
echo $obj->eat();

执行:

17-1抽象类是什么–PHP实战开发教程第2张


抽象类

1.使用关键字: abstract
2.类中只要有一个方法声明为abstract抽象方法,那么这个类就必须声明为抽象类
3.抽象方法只允许有方法声明与参数列表,不允许有方法体;
4.因为抽象方法的不确定性,所以抽象类禁止实例化,仅允许通过继承来实例化;
5.继承抽象类的子类中,必须将抽象类中的所有抽象方法全部实现
6.子类成员的访问限制级别必须等于或小于抽象类的约定,例如抽象类是protected,子类必须是
protected 或者 public 不允许是private
7.子类方法参数必须与抽象类方法参数完全一致,但允许增加默认参数

特别注意
1. 尽管抽象类不能实例化,但仍然可以为它创建构造器,但必须声明为final
2. 抽象类理论上说不应该拥有静态成员,部分编辑器会有E_STRICT2048提示,但仍然可以这样做


如果对于eat()方法,只给出样子,而不实现,该方法叫做抽象方法。也称为协议,委托,约定。

public function eat();
抽象方法,需要这样写:
abstract public function eat();
一个类中只要有抽象方法,该类必须声明为抽象类,且抽象类不允许实例化!
抽象类一般用做父类,其方法通过继承实现

17-1抽象类是什么–PHP实战开发教程第3张


修改:

<?php
/**
 * 抽象类
 */
abstract class Fruits
{
    protected  $name;

    public function __construct($name)
    {
        $this->name=$name;
    }
    //抽象方法
    abstract public function eat();
}
class Apple extends Fruits
{
    protected  $name;
    public function __construct($name)
    {
        parent::__construct($name);
    }

    public function eat()//子类必须将父类中的抽象方法全部实现!!!
    {
        return $this->name."是可以生吃的";
    }

}
$obj=new Apple('西瓜');
echo $obj->eat();

执行:

17-1抽象类是什么–PHP实战开发教程第4张


纲亨歧蕾霸畴酱腺煤洽拳竿聊