//定义一个数据库异常的规范(关键字interface),称为接口
/*
1)接口里面只能声明常量,不能声明变量,并且常量必须有初始值,关键字是const
2)接口里面的方法必须是抽象方法,不能包含任何的方法体和方法的实现
3)方法的权限必须是public,不能是private,procted
*/
//如何使用接口呢?
/*
1.如何使用接口里面的常量,接口的名称::常量的名称,例如:IdbException::ExceptionName;
2.如何使用接口里面的方法?必须由类去覆盖和实现
a)实现接口必须使用关键implements
一些问题以及答案:
/*
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)类实现接口的同时能被继承吗?如果能,是先继承后实现,还是先实现后继承呢?
答案:可以,先继承后实现