美文网首页
php高级篇(1)——抽象类

php高级篇(1)——抽象类

作者: 小光og | 来源:发表于2017-06-10 19:43 被阅读0次

    定义 :

    定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。

    继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。 这也适用于 PHP 5.4 起的构造函数。在 PHP 5.4 之前的构造函数声明可以不一样的。

    注意:

    1. 抽象方法实现的访问级别必须小于抽象类中的方法

    2. 不能被实例化(不能用new来创建对象)

    3. 被生命方法不能包含函数体

    4. 扩展类也为抽象类,就不用实现所有的抽象函数

    例子:

    //shape为图形类,FourSidesShape为正方形,TreeSidesShape为三角形

    //include_once("constant.php");

    //shape为图形类,FourSidesShape为正方形,TreeSidesShape为三角形

    abstract class Shape {

    abstract public function getArea();

    abstract public function getLength();

    public function getType(){

    }

    }

    class FourSidesShape extends Shape{

    private $width;

    private $heigth;

    public function __construct($width,$height){

    $this->width = $width;

    $this->height = $height;

    }

    public function getArea(){

    $area = $this->width * $this->height;

    echo "面积:".$area;

    }

    public function getLength(){

    $length = ($this->width+$this->height)*2;

    echo "周长:".$length;

    }

    }

    abstract class TreeSidesShape extends Shape{

    }

    /*试着new 一个 Shape,是否成功

    $shape = new Shape();

    */

    /*

    1 试着注释掉 getArea方法

    2 将getArea方法变为私有

    3 将Shape类中getArea加一个空函数体

    4 注释掉 Shape类中的 getArea 和 getLength方法

    5

    */

    /* 成功例子*/

    $fShape = new FourSidesShape(10,20);

    $fShape->getArea();

    // $sShape = new TreeSidesShape();

    相关文章

      网友评论

          本文标题:php高级篇(1)——抽象类

          本文链接:https://www.haomeiwen.com/subject/flkcqxtx.html