错误和异常处理

一、错误处理

  1.常见的错误级别

// Notice
json_encode($arr);

// Warning
json_encode();

// Fatal error
jsonp_encode();

  2.设置php报告错误的级别

    错误级别查看可通过文档的 函数参考->错误处理->预定义常量 查看。

//只显示error类型的错误
error_reporting(E_ERROR);

// 报告所有错误,&(并且) ~(不包括)
error_reporting(E_ALL & ~E_NOTICE);

// 屏蔽所有错误
error_reporting(0);

  3.自定义错误处理

// 设置一个用户的函数(error_handler)来处理脚本中出现的错误
mixed  set_error_handler  ( callable  $error_handler  [, int $error_types  = E_ALL | E_STRICT  ] )

// error_handler( $errno ,  $errstr ,  $errfile ,  $errline )
function  myErrorHandler($errno, $errstr, $errfile, $errline){
    // code
}

  4.说明

    当使用set_error_handler处理错误的时候,php就不会把错误直接显示到页面上,而是优先调用我们的自定义函数,并且把参数传递给我们的自定义函数,这样我们就可以自己处理错误,完整代码如下:

set_error_handler("myErrorHandler");

/**
 * 当发生错误的时候调用这个函数,而不是报告到页面上
 * @param  string $errno   错误级别
 * @param  string $errstr  错误详情
 * @param  string $errfile 错误所在的文件
 * @param  int    $errline 错误所在的行
 */
function myErrorHandler($errno, $errstr, $errfile, $errline){
    $str = sprintf("发生了一个%s错误,具体错误是:%s,错误所在的文件名:%s,错误所在的行:%s \r\n",$errno, $errstr, $errfile, $errline);
    file_put_contents("./error.log", $str, FILE_APPEND);
}

// notice
json_encode($arr);
echo ‘111<br>‘;

// warning
json_encode();
echo "2222<br>";

二、异常处理

  1.在 PHP 代码中所产生的异常可被 throw 语句抛出并被 catch 语句捕获

try {
    echo "try block<br />";
    throw new Exception("test");
} catch (Exception $ex) {
    echo "catch block<br />";
}

// try block
// catch block

  2.设置一个用户定义的异常处理函数

// 设置一个用户定义的异常处理函数
set_exception_handler (‘exception_handler‘);

function  exception_handler ( $exception ) {
  echo  "异常信息是: "  ,  $exception -> getMessage (),  "\n" ;
}

throw new  Exception ( ‘页面错误‘ );
echo  "Not Executed\n" ;

  3.Exception类

    上面的 throw new  Exception ( ‘页面错误‘ ) 其实就相当于 $exception = new  Exception ( ‘页面错误‘ );  那么Exception中都有哪些内容呢?通过文档的 语言参考->预定义异常 可以看到

// Exception类定义了我们需要的一些属性和方法
Exception{
    /* 属性 */
    protected string $message;
    protected int $code;
    protected string $file;
    protected int $line;

    /* 方法 */
    public __construct  ([ string $message  = ""  [, int $code  = 0  [, Exception  $previous  = NULL    ]]] )
    final public string getMessage  ( void )
    final public Exception getPrevious  ( void )
    final public int getCode  ( void )
    final public string getFile  ( void )
    final public int getLine  ( void )
    final public array getTrace  ( void )
    final public string getTraceAsString  ( void )
    public string __toString  ( void )
    final private void __clone  ( void )
}

  所以我们可以通过$exception对象访问到很多的属性和方法

  4.Exception的子类

    通过文档的 语言参考->预定义异常 可以看到Exception 是所有异常的基类。 php还为我们扩展了很多的子类,参见 SPL异常处理,里面有很熟悉的 RuntimeException, 他其实就是继承了Exception类

时间: 2024-10-19 11:18:17

错误和异常处理的相关文章

PHP的错误和异常处理

PHP的错误和异常处理 任何程序员在开发时都可能遇到过一些失误,或其他原因造成错误的发生.当然,用户如果不愿意或不遵循应用程序的约束,也会在使用时引起一些错误发生.PHP程序的错误发生一般归属于下列三个领域. Ø  语法错误 语法错误最常见,并且最容易修复.例如,遗漏了一个分号,就会显示错误信息.这类错误会阻止脚本执行.通常发生在程序开发时,可以通过错误报告进行修复,再重新运行. Ø  运行时错误 这种错误一般不会阻止PHP脚本的运行,但是会阻止脚本做希望它所做的任何事情.例如,在调用heade

【Go语言】错误与异常处理机制

①error接口 Go语言中的error类型实际上是抽象了Error()方法的error接口 type error interface { Error() string } Go语言使用该接口进行标准的错误处理. 对于大多数函数,如果要返回错误,大致上都可以定义为如下模式,将error作为多种返回值中的最后一个,但这并非是强制要求: func Foo(param int)(n int, err error) { // ... } 调用时的代码建议按如下方式处理错误情况: n, err := Fo

再谈PHP错误与异常处理

博客好久没有更新了,实在惭愧,最近在忙人生大事,哈哈!这段时间没有看什么新的东西,结合项目中遇到的PHP异常处理问题,我又重新梳理了之前模糊的概念,希望对大家理解PHP异常处理有所帮助. 请一定要注意,没有特殊说明:本例 PHP Version < 7 说起PHP异常处理,大家首先会想到try-catch,那好,我们先看一段程序吧:有一个test.php文件,有一段简单的PHP程序,内容如下,然后命令行执行:php test.php 1 <?php 2 $num = 0; 3 try { 4

PHP常用功能块_错误和异常处理 — php(32)

一.错误和异常处理 1.1 错误类型和基本的调试方法PHP程序的错误发生一般归属于下列三个领域: 语法错误:语法错误最常见,并且也容易修复.如:代码中遗漏一个分号.这类错误会阻止脚本的执行. 运行时错误:这种错误一般不会阻止PHP脚本的执行,但会阻止当前要做的事情.输出一条错误,但php脚本继续执行 逻辑错误:这种错误最麻烦,既不阻止脚本执行,也不输出错误消息.一个异常则是在一个程序执行过程中出现的一个例外,或是一个事件,它中断了正常指令的运行,跳转到其他程序模块继续执行. PHP的错误报告级别

php错误和异常处理笔记

关于php的错误和异常处理的使用最近终于搞清楚了,下面是简要笔记:0.程序处理的原则: 0.首先是中断,即粗暴的停止程序,并且不提供错误信息,在php中就是die()和exit(),只是简单的输出一条消息,比粗暴中断有了一定进步; 1.然后是错误处理,就是在中断基础上增加关于错误的信息,以便调试,就是php中默认的错误处理方式(缺点见下); 2.为了弥补缺点,php允许程序员自定义错误处理函数;1.php自身的错误处理方式对于web用户是不友好的(warning级别的错误不影响后续的程序运行,而

【软件构造】第七章第二节 错误与异常处理

第七章第二节 错误与异常处理 本节关注:Java中错误和异常处理的典 型技术--把原理落实到代码上! Outline: Java中的错误和异常(java.lang.throwable) 异常 Runtime异常与其他异常(Exception) Checked异常和unchecked异常 checked异常的处理机制 自定义异常 Notes: ## Java中的错误和异常 [Throwable] Java.lang.throwable Throwable 类是 Java 语言中所有错误或异常的超类

软件构造 第七章第二节 错误与异常处理

第七章第二节 错误与异常处理 内部错误:程序员通常无能为力,一旦发生,想办法让程序优雅的结束 异常:你自己程序代码发生的,可以捕获处理 [Error] Error类描述很少发生的Java运行时系统内部的系统错误和资源耗尽情况(例如,VirtualMachineError,LinkageError). 对于内部错误:程序员通常无能为力,一旦发生,想办法让程序优雅的结束 Error的类型: 用户输入错误 例如:用户要求连接到语法错误的URL,网络层会投诉. 设备错误 硬件并不总是做你想做的. 输出器

【PHP】解析PHP中的错误和异常处理

目录结构: contents structure [-] 错误级别 自定义处理器 设置异常日志 自定义异常类 在这篇文章中,笔者将会阐述PHP中的异常处理,希望能够对你有所帮助. 1.错误级别 PHP5中定义了16种不同的错误级别,下面仅仅粘贴其中几种. 级别常量 错误值 错误报告描述 E_ERROR 1 致命的运行时错误(阻止脚本执行) E_WARNING 2 运行时警告(非致命性错误) E_PARSE 4 从语法中解析错误 E_NOTICE 8 运行时注意消息(可能是或可能不是一个问题) E

Python之错误与异常处理

一.错误与异常处理 错误: 1.语法错误print( 2.逻辑错误1/0 异常: 程序出现错误时发出的信号(异常追踪 错误的位置 异常类 异常值) 异常处理就是防止程序崩溃(当然if条件也可以进行异常处理,但是代码可读性不高,代码块乱) 1 # try: 2 # age = input("----->") 3 # int(age) 4 # except ValueError as e: 5 # print(e) 6 # except KeyError as e: 7 # prin