接口VS继承、final、const

1、实现接口VS继承类

PHP的继承是单继承,也就是说一个类只能继承一个类 ,这种单继承模式保证了类的纯洁性,比C++中的多继承类机制简洁。但是不可否认,对于类的扩展有一定的影响,所以我们认为:

1) 实现接口可以看作是对继承的一种补充,还有一点,继承 是层级式的,不太灵活,及一个类可以层级式的继承。实现阶梯状,但是主要父类有错误会被一个一个的继承下来,这样对于代码的高内聚低耦合来说不是最优的

2)实现接口可以在不打破关系的前提下,对某个功能扩展,非常灵活

看下面的代码:

<?php
    class Monkey{
		public $age;
		public $name;

		public function climbing(){
			echo "猴子会爬树。。";
		}
    }

	interface Bridable{
		public function fly();
	}

	interface iFishable{
		public function swimming();
	}
     //一个类最多能继承一个父类,可以有多个接口,对子类进行扩展
	class littleMonkey extends Monkey implements Bridable , iFishable{
		public function fly(){
			echo "猴子会飞。。。";
		}
		public function swimming(){
            echo "猴子会游泳。。。";

		}

	}

	$littleMonkey1=new littleMonkey();
	$littleMonkey1->fly();
	$littleMonkey1->swimming();
	$littleMonkey1->climbing();
?>

2、final关键字,

final什么时候用

1) 因为安全的考虑,类的某个方法不允许被修改。可以用final修饰。

2)不希望某个类被其他的类继承

特别说明:final 不能修改成员属性(变量)。

3、const 概念 

1) 当一个成员的变量不允许被修改的时,可以用const 去修饰这个成员变量

基本用法:const 常量名=值;

访问: 类名::常量名  或者 接口名::常量名

注意:常量名应该大写,并且前面不要有$符号,并且定义时必须赋初始值。

<?php
    class A{
		const TAX_RATE=0.08;
		public function payTax($val){
			return $val*A::TAX_RATE;
			// 另外也可以 slef::TAX_RATE 『OK』
		}
    }

	$a=new A();
	echo $a->payTax(100);

?>

文章导航