秋月級駆逐艦 發表於 2026-5-3 17:27:18

PHP如何抛出和接收错误的详细指南

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">抛出错误(异常)</a></li><li><a href="#_label1">接收错误(异常)</a></li><li><a href="#_label2">错误处理函数</a></li></ul></div><p class="maodian"><a name="_label0"></a></p><h2>抛出错误(异常)</h2>
<p>在PHP中,你可以使用<code>throw</code>关键字来抛出一个异常。这通常在你检测到某种错误情况时发生,比如无效的输入、数据库连接失败等。</p>
<div class="jb51code"><pre class="brush:php;">&lt;?php
function divide($numerator, $denominator) {
    if ($denominator == 0) {
      throw new Exception("Division by zero!");
    }
    return $numerator / $denominator;
}

try {
    echo divide(10, 0);
} catch (Exception $e) {
    echo 'Caught exception: ',$e-&gt;getMessage(), "\n";
}
?&gt;</pre></div>
<p>在这个例子中,如果$denominator是0,函数divide将抛出一个Exception对象,其中包含错误消息&quot;Division by zero!&quot;。</p>
<p class="maodian"><a name="_label1"></a></p><h2>接收错误(异常)</h2>
<p>要接收(或捕获)异常,你需要使用try...catch结构。在try块中,你放置可能抛出异常的代码。在catch块中,你处理这些异常。</p>
<div class="jb51code"><pre class="brush:php;">try {
    // 可能会抛出异常的代码
} catch (ExceptionType1 $e) {
    // 处理ExceptionType1类型的异常
} catch (ExceptionType2 $e) {
    // 处理ExceptionType2类型的异常
} catch (Exception $e) {
    // 处理所有其他类型的异常(这是一个通用的catch块)
} finally {
    // 可选的finally块,无论是否发生异常,都会执行这里的代码
}</pre></div>
<p>在上面的例子中,我们有一个<code>catch</code>块来捕获并处理<code>Exception</code>对象。你也可以有多个<code>catch</code>块来捕获并处理不同类型的异常。<code>finally</code>块是可选的,但很有用,因为它会无条件执行,常用于清理资源,如关闭文件句柄或数据库连接。</p>
<p class="maodian"><a name="_label2"></a></p><h2>错误处理函数</h2>
<p>除了异常处理,PHP还提供了内置的错误处理函数,如<code>set_error_handler()</code>,它允许你设置一个用户定义的错误处理函数。然而,请注意,错误处理函数只能捕获由PHP引擎抛出的运行时错误(如调用未定义的函数),而不能捕获由<code>throw</code>关键字抛出的异常。</p>
<div class="jb51code"><pre class="brush:php;">function customError($errno, $errstr, $errfile, $errline) {
    echo "&lt;b&gt;Error:&lt;/b&gt; [$errno] $errstr - $errfile:$errline&lt;br /&gt;";
    echo "Terminating Script";
    die();
}

set_error_handler("customError");

// 触发一个错误
echo(test_function());
?&gt;</pre></div>
<p>在这个例子中,如果test_function()未定义,customError函数将被调用以处理这个错误。</p>
<p>然而,对于异常处理,你应该使用try...catch结构,而不是错误处理函数。错误处理函数更适合处理那些不是由你显式抛出的错误(例如,由PHP引擎抛出的错误)。</p>
<p>总的来说,在PHP中抛出和接收错误通常涉及使用异常处理机制(throw、try、catch和finally),以及可能的错误处理函数来捕获和处理运行时错误。</p>
頁: [1]
查看完整版本: PHP如何抛出和接收错误的详细指南