`
cyxlgzs
  • 浏览: 90056 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

PHP实践之路(十)类与对象(3)

阅读更多

PHP实践之路(目录索引)


类与对象(3)

1、抽象类

a、在class前面加上abstract关键字类声明一个抽象类,在方法上面加上abstract关键字来定义抽象方法

b、抽象类不能直接被实例化,你必须先继承该抽象类,然后再实例化子类

c、抽象类中至少要包含一个抽象方法。如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现

d、继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法

e、继承父类的抽象方法时,访问控制必须宽松于父类。宽松程度由大到小依次为public>protected>private

实验一下

<?php
//换行输出
function println($var){
	echo $var;
	echo "<br />";
}	
abstract class Father
{
	abstract function fun1();		//抽象方法只声明,不实现
	abstract protected function fun2();
	function fun3(){
		println("I am not abstract method...");
	}
	private function fun4(){
		println("private method...");
	}
}

class Child extends Father
{
	//父类中fun1默认的可见性为public,所以子类中该方法的可见性必须为public
    function fun1(){
		println("fun1 executed...");
	}
	//?此处可见性为protected时将报错,我的php版本为php-5.4.7
	function fun2(){
		println("fun2 executed...");
	}
}

$obj=new Child();

$obj->fun1();		//fun1 executed...
$obj->fun2();		//fun2 executed...
$obj->fun3();		//I am not abstract method...
//$obj->fun4();		//父类私有方法不能继承

?>


按照API文档介绍抽象方法子类的可见性可与父类一样,但这里的fun2如果采用protected则报错,这是为什么呢?请知情者指教

2、接口


a、接口使用interface关键字声明

b、接口可以理解为类里所有方法都是抽象方法的抽象类,也就是所有方法都只含声明,没有实现(但并不用abstract来声明方法)

c、接口中定义的所有方法都必须是public

d、使用implements关键字来实现接口,一个类可以实现多个接口。实现多个接口时,接口中的方法不能有重名

e、接口也可以继承,通过使用extends操作符

接下来实验时间

<?php
//换行输出
function println($var){
	echo $var;
	echo "<br />";
}	
//定义一个接口动物
interface Animal{
	function walk();
	function eat();
}
//定义一个接口人继承自动物
interface Person extends Animal{
	function talk();
}

//定义一个接口中国人
interface Chinese{
	function work();
}
//定义一个类,实现了Person和Chinese两个接口,必须实现两个接口中的所有方法
class ChineseWorker implements Person,Chinese{
	function walk(){
		println("walking...");
	}
	function eat(){
		println("eating...");
	}
	function talk(){
		println("talking...");
	}
	function work(){
		println("working in china...");
	}
}

$worker=new ChineseWorker();

$worker->walk();		//walking...
$worker->eat();			//eating...
$worker->talk();		//talking...
$worker->work();		//working in china...

?>


版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics