php_lang_ref:classes and objects>>class abstraction

<?php
// +----------------------------------------------------------------------
// | Perfect Is Shit
// +----------------------------------------------------------------------
// | classes and objects >> class abstraction
// +----------------------------------------------------------------------
// | Author: alexander <gt199899@gmail.com>
// +----------------------------------------------------------------------
// | Datetime: 2016-07-20 15:52:46
// +----------------------------------------------------------------------
// | Copyright: Perfect Is Shit
// +----------------------------------------------------------------------

/**
 * case1:抽象类不能被实例化
 * case2:抽象类可以不包含抽象方法,但是如果类中有一个抽象方法,那么这个类必须声明为抽象类
 * case3:继承一个抽象类的时候,必须定义抽象类中的所有抽象方法,可见性相同或更为宽松
 * case4:抽象方法被子类定义时,方法的调用方式必须匹配,即类型和所需参数数量必须一致
 * case5:抽象方法被子类定义时,抽象方法的所有参数必须定义,子类可以多定义可选参数
 */

namespace case1;
abstract class abstractClass{
    abstract public function hello();
}
// 实例化抽象类会产生一个Fatal error
# $o = new abstractClass();

namespace case2;
abstract class abstractClass1{
    public function hello(){}
}
// 含有抽象方法的类没有声明为抽象类,会产生一个Fatal error
# class abstractClass2{
#     abstract function hello();
# }

namespace case3;
abstract class abstractClass{
    abstract public function hello();
    abstract public function say();
    abstract protected function world();
}
// 没有完全声明父类中的抽象方法会产生一个Fatal error
# class classes1 extends abstractClass{
#     public function hello(){}
# }
// 下面将protected world定义为private world会产生一个Fatal error
# class classes2 extends abstractClass{
#     public function hello(){}
#     public function say(){}
#     private function world(){}
# }

namespace case4;
abstract class abstractClass{
    abstract public function hello($name);
}
class classes extends abstractClass{
    // 子类没有定义抽象方法的参数,会产生一个Fatal error
    # public function hello(){}
    // 子类定义抽象方法的参数与抽象方法不一致,会产生一个Fatal error
    # public function hello($name, $e){}
    // 子类多定义一个可选参数,声明与抽象方法没有冲突
    public function hello($name, $e=''){}
}

namespace case5;
abstract class abstractClass{
    abstract public function hello($name, $e='', $f='');
}
class classes extends abstractClass{
    // 子类没有定义抽象方法的可选参数$f,会产生一个Fatal error
    # public function hello($name, $e=''){}
    // 子类定义抽象方法的参数类型不一样,会产生一个Fatal error
    # public function hello($name, $e='', $f){}
    public function hello($name, $e='', $f='', $g=''){}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值