検索
ホームページphp教程php手册PHP フレームワークをステップバイステップで作成する (9)

例外処理メカニズムについて前述したように、デバッグがオンになっている場合は、例外をカスタマイズすることが最善です。デバッグがオフになっている場合は、例外が表示されます。このレッスンでは、主に例外処理のメカニズムについて説明します。

次に、Toper の Tp_Exception という例外基本クラスを定義します。ここでは単に BaseException と呼びます。次に、BaseException.php には最初にシェルフが必要です。

1

1

2 class BaseException extends Exception { テーブル>

3     public function printStack() {

2

4         

5     }
クラス BaseException は例外 {

を拡張します テーブル>
6     public function __toString() {

7     
3

8     }
パブリック関数 printStack() {

9 }
テーブル> 4 テーブル> 5 } テーブル> 6 パブリック関数 __toString() { テーブル> 7 テーブル> 8 } テーブル> 9 } テーブル>

最も基本的なことは、このクラスは Exception から継承する必要があり、次に __toString メソッドと別のカスタム printStack メソッドを実装する必要があるということです。__toString メソッドを実装する理由は、new Exception( を直接スローすることが多いためです。 ) この方法で例外がスローされた場合は、__toString()メソッドを直接呼び出し、printStackメソッドを呼び出すことでスタック情報が出力されます。

まず、どちらの方法でも、デバッグ モードであるかどうかを判断する必要があります。デバッグ モードである場合は、直接出力するだけです。エラー ページに移動しますが、ジャンプする前に、例外情報をログ ファイルに書き込む必要があります。

__toString であっても printStack であっても、デバッグがオフになっている場合はデバッグ情報をログ ファイルに記録する必要があることに気づいたかもしれません。そのため、最初に補助関数を記述する必要があります:

1 protected function _toLogFile($str) {
1

2         file_put_contents(APP_PATH . '/log',$str,FILE_APPEND);

保護された関数 _toLogFile($str) {

3     }
テーブル>

2

file_put_contents(APP_PATH . '/log',$str,FILE_APPEND);

テーブル>

3

}

1 protected function _outputErrorPage() {
テーブル>

2         header("content-type:text/html");

3         echo file_get_contents(APP_PATH . '/error.html');
ここでは、簡単にするために、file_put_contents を直接使用します。この関数は非常に気に入っています~~

4     }
。 これまで URL リダイレクトやリクエストの転送などについて話していないため、当面はエラー ページが直接表示されるため、補助関数が必要です: 1 保護された関数 _outputErrorPage() { テーブル> 2 header("content-type:text/html"); テーブル> 3 echo file_get_contents(APP_PATH . '/error.html'); テーブル> 4 } テーブル>

コードはシンプルにする必要があるため、エラー ページとログ ファイルはプロジェクトのルート ディレクトリに直接書き込まれます。興味がある場合は、設定ファイルにパスを書き込んでみてください。難しくありません。

補助関数が記述されているため、他の 2 つの関数は非常に簡単です:

1 public function printStack() {
1

2         if(true === C('debug')) {

パブリック関数 printStack() {

3             echo parent::getTraceAsString();
テーブル>

4         } else {

2

5             $this->_toLogFile(parent::getTraceAsString());

6             $this->_outputErrorPage();
if(true === C('debug')) {

テーブル>
7         }

8     }
3

echoparent::getTraceAsString();

テーブル>

4

1 public function __toString() {
} else {

2         if(true !== C('debug')) {
テーブル> 5 $this->toLogFile(parent::getTraceAsString()); テーブル> 6 $this->_outputErrorPage(); テーブル> 7 } テーブル> 8 } テーブル> 1 パブリック関数 __toString() { テーブル> 2 if(true !== C('debug')) { テーブル>

3             $this->_toLogFile(parent::getTraceAsString());

4             $this->_outputErrorPage();

5             exit();

6         }

7         return parent::__toString();

8     }

もちろん、__toString は文字列を返すので、例外がスローされると、例外情報が直接表示されます。デバッグ終了後にページに例外情報が表示されないように、ここで直接終了します。もちろん、これより良い方法はまだ思い浮かばないので、printStack を使用することをお勧めします。

私の例外クラスはアイデアを紹介するために使用されますので、何か良い方法があれば、もっとコミュニケーションを取り、お互いに学び、お互いに成長してください。

もちろん、ここでは例外処理用の基本クラスを定義するだけです。後で、例外について多くのサブクラスを記述します。実際に使用するときは、そのサブクラスが呼び出されます。



声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません