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)類實現接口的同時能被繼承嗎?如果能,是先繼承後實現,還是先實現後繼承呢?
答案:可以,先繼承後實現

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