PHP 类与对象 —— 抽象类

抽象类或者抽象方法前面加上abstract关键字。

  1. PHP5开始支持抽象类和抽象方法
  2. 定义为抽象的类不能实例化。但是可以被继承。
  3. 任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
  4. 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
  5. 继承一个抽象类的时候,子类必须定义父类中的所有抽象方法。
  6. 子类的访问控制必须和父类一样,或者更加宽松,比如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。
  7. 子类调用父类的调用方式必须匹配,就是类型和所需参数数量必须一致。例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。
abstract class AbstractPhone{
	//子类必须定义这些方法
	//抽象类后面可以不带{}
	abstract protected function getValue();
	abstract protected function prefixValue($prefix);

	//普通方法(非抽象方法)
	public function printOut(){
		print $this->getValue()."\n";
	}
}

class PhoneClass1 extends AbstractPhone{
	protected function getValue(){
		return "Phone1";
	}
	
	public function prefixValue($prefix){
		return "{$prefix}Phone1";
	}
}

class PhoneClass2 extends AbstractPhone{
	protected function getValue(){
		return "Phone2";
	}
	
	public function prefixValue($prefix){
		return "{$prefix}Phone2";
	}
}


$phone1 = new PhoneClass1();
$phone1->printOut();
echo $phone1->prefixValue('Meizu')."\n";

$phone2 = new PhoneClass2();
$phone2->printOut();
echo $phone2->prefixValue('Meizu')."\n";

//输出
Phone1
MeizuPhone1
Phone2
MeizuPhone2
abstract class AbstractClass{
	//我们抽象的方法仅需要定义需要的参数
	abstract protected function prefixName($name);
}

class Phone extends AbstractClasss{
	//子类可以定义父类不存在的参数
	public function prefixName($name,$separator = "."){
		if ($name == "Pacman") {
            $prefix = "Mr";
        } elseif ($name == "Pacwoman") {
            $prefix = "Mrs";
        } else {
            $prefix = "";
        }
        return "{$prefix}{$separator} {$name}";
	}
}

$class = new ConcreteClass;
echo $class->prefixName("Pacman"), "\n";
echo $class->prefixName("Pacwoman"), "\n";

输出
Mr. Pacman
Mrs. Pacwoman
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值