php面向对象编程--多态性之接口

//定义一个数据库异常的规范(关键字interface),称为接口
/*
1)接口里面只能声明常量,不能声明变量,并且常量必须有初始值,关键字是const
2)接口里面的方法必须是抽象方法,不能包含任何的方法体和方法的实现
3)方法的权限必须是public,不能是private,procted
*/
//如何使用接口呢?
/*
1.如何使用接口里面的常量,接口的名称::常量的名称,例如:IdbException::ExceptionName;
2.如何使用接口里面的方法?必须由类去覆盖和实现
a)实现接口必须使用关键implements

b)实现的接口权限必须是public,不能低于public的权限,也就是说private和procted是不能覆盖接口的方法的 

*/


/*
abstract class AClass
{
	abstract protected function fun1();
}

abstract class BClass extends AClass
{
	abstract protected function fun2();
}

interface Ilanguage 
{
	function speak();
}

interface Iamerica
{
	function say();
}


class Brtain implements Ilanguage,Iamerica
{
	function speak(){

	}

	function say(){

	}
}

class abc extends BClass implements Ilanguage,Iamerica
{
	function fun1(){}
	function fun2(){}
	function speak(){}
	function say(){}
}

*/





/*
interface Ienglish extends Ilanguage,Iamerica
{

}
*/




//echo IdbException::ExceptionName;

/*
class useInterface implements IdbException
{
	public function Handle(){
		return ;
	}

}

class A extends BClass
{
	protected function fun1(){

	}

	protected function fun2(){

	}
}
*/

interface IdbException
{
	const ExceptionName = "数据库异常处理规范接口" ;
	function Handle( $config );
}

//链接异常的处理类
class connectException extends Exception implements IdbException
{
	function Handle( $config )
	{
		$date = date( "Ymd" );
		$log_file = ERROR_LOG."connect/mysql_error_{$date}.txt";
		echo "<br />处理数据链接异常,生成错误日志处理文档(mysql_error_{$date}.txt)<br />";
		$string ="链接数据库失败了".var_export( $config , true );
		file_put_contents( $log_file,$string );
	}
}
//选择数据库的处理类
class selectException extends Exception implements IdbException
{
	function Handle( $dbName )
	{
		$date = date( "Ymd" );
		$log_file = ERROR_LOG."select/selectdb_error_{$date}.txt";
		echo "<br />处理数据选择异常,生成错误日志处理文档(selectdb_error_{$date}.txt)<br />";
		$string ="选择数据库失败了,可能".$dbName."不存在";
		file_put_contents( $log_file,$string );
	}
}
//操作数据异常
class execException extends Exception implements IdbException
{
	function Handle( $sql )
	{
		$date = date( "Ymd" );
		$log_file = ERROR_LOG."exec/exec_error_{$date}.txt";
		echo "<br />sql异常,生成错误日志处理文档(exec_error_{$date}.txt)<br />";
		$string ="sql操作失败了,错误操作语句".$sql;
		file_put_contents( $log_file,$string );
	}
}
//其他数据库异常
class otherException extends Exception implements IdbException
{
	function Handle( $config ){
		echo "这是一个处理";
	}
}

//定义数据文件备份异常
class backupException extends Exception implements IdbException
{
	function Handle( $config )
	{
		echo "这是一个处理";
	}
}

一些问题以及答案:

台湾软件百事达公司面试题:抽象类与接口有何不同?
1)接口必须使用关键字implements去实现,抽象类必须被继承extends
2)接口的方法必须声明为public ,而抽象类的方法可以声明为protected和pulbic
3)覆盖抽象类可以是pulbic也可以是protected,但接口必须是public 
4)抽象类不一定要含有抽象的方法,但接口的方法必须是抽象的
5)一个类只要含有一个抽象方法,那么该类一定是一个抽象类
6)一个接口如果被抽象所实现的话,抽象类也必须覆盖掉接口的方法


香港电讯盈科:


1)PHP抽象类可以被多继承吗?如果不能,如何解决呢?
答案:php称为间接继承法


2)php里面的接口可以相互继承吗?如果可以,那么他们可以被多继承吗?
答案:接口是可以相互继承.PHP的接口是可以多继承的




Jim's Problem:


1)接口能被类多次实现吗?可以的
2)接口可以实现接口吗?肯定不可以的
3)类实现接口的同时能被继承吗?如果能,是先继承后实现,还是先实现后继承呢?
答案:可以,先继承后实现

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章