# 错误处理和日志记录

* [debug_backtrace - 产生一条回溯跟踪](#debugbacktrace)
* [debug_print_backtrace - 打印一条回溯](#debugprintbacktrace)
* [error_clear_last - 清除最近一次错误](#errorclearlast)
* [error_get_last - 获取最后发生的错误](#errorgetlast)
* [error_log - 发送错误信息到某个地方](#errorlog)
* [error_reporting - 设置应该报告何种 PHP 错误](#errorreporting)
* [restore_error_handler - 还原之前的错误处理函数](#restoreerrorhandler)
* [restore_exception_handler - 恢复之前定义过的异常处理函数](#restoreexceptionhandler)
* [set_error_handler - 设置用户自定义的错误处理函数](#seterrorhandler)
* [set_exception_handler - 设置用户自定义的异常处理函数](#setexceptionhandler)
* [trigger_error - 产生一个用户级别的 error / warning / notice 信息](#triggererror)
* [user_error - 产生一个用户级别的 error / warning / notice 信息](#usererror)

## debug_backtrace

```php
<?php

/**
 * Just a test function.
 *
 * @param  void
 * @return void
 */
function foo()
{
    var_dump(debug_backtrace());
}

foo();

```

## debug_print_backtrace

```php
<?php

/**
 * Just a test function.
 *
 * @param  void
 * @return void
 */
function foo()
{
    debug_print_backtrace();
}

foo();

```

## error_clear_last

```php
<?php

error_clear_last();

```

## error_get_last

```php
<?php

var_dump(error_get_last());

```

## error_log

```php
<?php

error_log('Error!', 0);
error_log('Error!', 1, 'example@example.com');
error_log('Error!', 3, __DIR__ . '/error.log');

```

## error_reporting

```php
<?php

error_reporting(0);
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
error_reporting(E_ALL);
error_reporting(-1);
error_reporting(E_ALL ^ E_NOTICE);

```

## restore_error_handler

```php
<?php

/**
 * Test the error handling.
 *
 * @param  int    $errno
 * @param  string $errstr
 * @param  string $errfile
 * @param  int    $errline
 * @return void
 */
function foo(int $errno, string $errstr, string $errfile, int $errline)
{
    var_dump(__FUNCTION__);
}

/**
 * Test the error handling.
 *
 * @param  int    $errno
 * @param  string $errstr
 * @param  string $errfile
 * @param  int    $errline
 * @return void
 */
function bar(int $errno, string $errstr, string $errfile, int $errline)
{
    var_dump(__FUNCTION__);
}

set_error_handler('foo');
set_error_handler('bar');
trigger_error('Notice!');
// string(3) "bar"

var_dump(restore_error_handler()); // bool(true)
trigger_error('Notice!');
// string(3) "foo"

```

## restore_exception_handler

```php
<?php

/**
 * Test the exception handling.
 *
 * @param  Exception $exception
 * @return void
 */
function foo(Exception $exception)
{
    var_dump(__FUNCTION__);
}

/**
 * Test the exception handling.
 *
 * @param  Exception $exception
 * @return void
 */
function bar(Exception $exception)
{
    var_dump(__FUNCTION__);
}

set_exception_handler('foo');
set_exception_handler('bar');
var_dump(restore_exception_handler()); // bool(true)
throw new Exception('Uncaught Exception!');
// string(3) "foo"

```

## set_error_handler

```php
<?php

/**
 * Test the error handling.
 *
 * @param  int    $errno
 * @param  string $errstr
 * @param  string $errfile
 * @param  int    $errline
 * @return void
 */
function foo(int $errno, string $errstr, string $errfile, int $errline)
{
    var_dump(compact(['errno', 'errstr', 'errfile', 'errline']));
}

set_error_handler('foo');
trigger_error('Notice!');

set_error_handler('foo', E_USER_NOTICE);
trigger_error('Notice!', E_USER_NOTICE);

set_error_handler('foo', E_USER_ERROR);
trigger_error('Error!', E_USER_NOTICE);

```

## set_exception_handler

```php
<?php

/**
 * Test the exception handling.
 *
 * @param  Exception $exception
 * @return void
 */
function foo(Exception $exception)
{
    var_dump($exception->getMessage());
}

set_exception_handler('foo');
throw new Exception('Uncaught Exception!');
// string(19) "Uncaught Exception!"

```

## trigger_error

```php
<?php

trigger_error('Notice!');                  // PHP Notice:  Notice!
trigger_error('Notice!', E_USER_NOTICE);   // PHP Notice:  Notice!
trigger_error('Warning!', E_USER_WARNING); // PHP Warning:  Warning!
trigger_error('Error!', E_USER_ERROR);     // PHP Fatal error:  Error!

```

## user_error

```php
<?php

user_error('Notice!');                  // PHP Notice:  Notice!
user_error('Notice!', E_USER_NOTICE);   // PHP Notice:  Notice!
user_error('Warning!', E_USER_WARNING); // PHP Warning:  Warning!
user_error('Error!', E_USER_ERROR);     // PHP Fatal error:  Error!

```

