Heim  >  Artikel  >  Backend-Entwicklung  >  Was tun, wenn in PHP eine Ausnahme auftritt?

Was tun, wenn in PHP eine Ausnahme auftritt?

醉折花枝作酒筹
醉折花枝作酒筹nach vorne
2021-05-17 17:40:472353Durchsuche

In diesem Artikel erfahren Sie, wie Sie PHP-Ausnahmen lösen. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Was tun, wenn in PHP eine Ausnahme auftritt?

Was tun, wenn in PHP eine Ausnahme auftritt?

<?php
/****************************************************
 * php处理异常
 * try中不主动throw,会先出现PHP的系统错误
 ****************************************************/
header("content-type:test/html:charset=utf-8");
error_reporting(-1);
try {
    $num1 = 3;
    $num2 = 0;
    if ($num2 == 0) {
        throw new Exception("自定义错误");
    } else {
        $res = $num1 / $num2;
    }

} catch (Exception $e) {
    echo $e->getMessage();
    // die(); // 终止异常
}
/******************************************************
 * php+mysql+pdo
 *****************************************************/
try {
    $pdo = new PDO("mysql:host=localhost;dbname=mysql", "root", "");
} catch (PDOException $e) {
    echo $e->getMessage();
    // die(); // 终止异常
}
/******************************************************
 * php+文件异常
 *****************************************************/

/**
 * PHP 读取大文件 SplFileObject :
 * https://blog.csdn.net/ekliu/article/details/8855907
 */
// SqlFileObject相对于传统的open($filename, &#39;r&#39;)产生的对象的优点在于不需要打开文件句柄  不需要关闭句柄更加的方便
$handle = new SplFileObject("sid_list.txt");
while (!$handle->eof()) {
    $item = $handle->fgets();
}

try {
    $pdo = new SplFileObject("text.txt", "r");
    echo "read File";
} catch (Exception $e) {
    echo $e->getMessage();
    // die(); // 终止异常
}
/******************************************************
 * php异常 嵌套
 *****************************************************/
try {
    throw new Exception("测试异常1");
} catch (Exception $e) {
    echo $e->getMessage();
    // die(); // 终止异常
    try {
        throw new Exception("测试异常2");
    } catch (Exception $e) {
        echo $e->getMessage();
    }
}

/******************************************************
 * php异常 自定义异常封装
 *****************************************************/
class MyException extends Exception
{
    public function __construct($message = "", $code = 0, $previous = null)
    {
        parent::__construct($message, $code, $previous);
    }

    public function __toString()
    {
        $message = "<h2>出现异常,如下:</h2>";
        $message .= "<p>" . __CLASS__ . "[{$this->code}:{$this->message}]</p>";
        return $message;
    }

    /****************自定义异常方法***************/
    public function test()
    {
        echo "这是自定义错误";
    }

    public function stop()
    {
        exit("异常 end...");
    }
}

// 开始调用 MyException
try {
    echo "出现异常啦";
    throw new MyException("测试自定义异常", 3);
} catch (MyException $e) {
    echo $e->getMessage();
}

// 嵌套使用 MyException 与 Exception (没有顺序)
try {
    throw new MyException("测试自定义异常");
} catch (Exception $e) {
    echo $e->getMessage();
} catch (MyException $e) {
    echo $e->getMessage();
}

/******************************************************
 * php异常 自定义异常封装    文件
 *****************************************************/
class FileException extends Exception
{
    public function getDetails()
    {
        switch ($this->code) {
            case 0:
                return "没有提供文件";
                break;
            case 1:
                return "文件不存在";
                break;
            case 2:
                return "不是一个文件";
                break;
            case 3:
                return "文件不可写";
                break;
            case 4:
                return "非法文件的操作模式";
                break;
        }
    }
}

class WriteData
{
    private $_message = "";
    private $_fp = null;

    public function __construct($filename = null, $mode = "w")
    {
        $this->_message = "文件:{$filename} ; 模式:{$mode}";
        if (empty($filename)) throw new FileException($this->_message, 0);
        if (!file_exists($filename)) throw new FileException($this->_message, 1);
        if (!is_file($filename)) throw new FileException($this->_message, 2);
        // is_writable — 判断给定的文件名是否可写
        if (!is_writable($filename)) throw new FileException($this->_message, 3);
        if (!in_array($mode, array("w", "w+", "a", "a
        +"))) throw new FileException($this->_message, 4);

        $this->_fp = fopen($filename, $mode);
    }

    public function write($data)
    {
        if (@!fwrite($this->_fp, $data . PHP_EOL)) throw new FileException($this->_message, 5);
    }

    public function close()
    {
        if ($this->_fp) {
            if (!fclose($this->_fp)) throw new FileException($this->_message, 6);
            $this->_fp = null;

        }
    }

    public function __destruct()
    {
        $this->close();
    }
}

Empfohlenes Lernen: php-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas tun, wenn in PHP eine Ausnahme auftritt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen