接着昨天的部分,php面向对象也提供了接口这个东西,单从接口这一块来说php和java基本上没区别,不论java还是php接口从一定程度上弥补了类单继承的不足,在不破坏类层级关系的前提下减小了耦合度.废话不说了来看一下java和php的相同点和不同点吧
1.php的接口里面不允许出现静态变量但是可以有常量,php的类内部常量用const来声明,java里允许有静态常量
2.java可以使用final来声明一个常量,但是php使用的是const
下面这些地方java和php一致
3.如果类用final修饰则该类不能被继承,如果用来声明方法表示方法不能被重写
4.php的类也可以同时继承一个类,并实现多个接口;同样的接口也可以继承接口
差不多也就这些,下面来继续研究php的错误处理和异常处理
说句真心话php的错误和异常处理真不怎地,比起java来简直就是弱爆了,个人感觉php的这一块还不成熟
一 php的错误处理
(1) 使用die()来处理,就像下面这样
<?php
function main(){
if(!file_exists("01.txt")){
die("文件不存在");
}else{
$f=fopen("01.txt","r");
fclose($f);
}
}
main();
?>
当然还有其他的写法,大家自己去写就好。
(2)顶层错误处理器
这种方式一般就是用于改写php的错误处理机制,就是说我们自己可以自己定义一个function,之后使用set_error_handler("自己的处理器",错误级别),这里一般不要使用E_USER的这种错误级别
(3)错误触发器,这种情况一般用于自定义的错误
定义和用法
trigger_error() 函数创建用户定义的错误消息。
trigger_error() 用于在用户指定的条件下触发一个错误消息。它与内建的错误处理器一同使用,也可以与由 set_error_handler() 函数创建的用户自定义函数使用。同样的set_error_handler()也有2个参数第一个是处理器名称,第二个是级别,这里级别有这么几种
- E_USER_ERROR
- E_USER_WARNING
- E_USER_NOTICE
error_log(error,type,destination,headers)error就是错误信息,一般是字符串,类型有这么几种
- 0 - 默认。根据在 php.ini 文件中的 error_log 配置,错误被发送到服务器日志系统或文件。
- 1 - 错误被发送到 destination 参数中的地址。只有该类型使用 headers 参数。
- 2 - 通过 PHP debugging 连接来发送错误。该选项只在 PHP 3 中可用。
- 3 - 错误发送到文件目标字符串。
二 异常处理
php里这一块和java差别有点大,最重要的一点就是php里的try...catch后面不能有finally,语法如下
try{
}catch(Exception $e){
echo $e.getMessage();
}
php也像java可以声明异常,代码大致如下
<?php
//create function with an exception
function checkNum($number)
{
if($number>1)
{
throw new Exception("Value must be 1 or below");
}
return true;
}
//trigger exception
checkNum(2);
?>
异常的机制大致和java类似,如果声明了异常但是调用的地方没有捕获,异常也不会出现,php也可以自定义异常如下所示
<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "someone@example...com";
try
{
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
{
//throw exception if email is not valid
throw new customException($email);
}
}
catch (customException $e)
{
//display custom message
echo $e->errorMessage();
}
?>
还有一种就是异常顶级处理器set_exception_handler,用法类似这种
<?php
set_exception_handler( 'exc_handler' );
function exc_handler($exception) {
echo "Uncaught exception: " , $exception->getMessage(), "\n";
}
function errorone() {
throw new Exception("Test 1");
}
function errortwo() {
throw new Exception("Test 2");
}
function test() {
errorone();
errortwo();
}
test();
test();
?>
有一些情况php无法捕获到异常,例如5/0原因是php没有声明这些异常,算是php的缺陷吧。综合php,java,asp.net来看java异常处理做的还是比较出色的。