PHP フレームワークをステップバイステップで作成する (9)

WBOY
リリース: 2016-06-21 08:50:38
オリジナル
1200 人が閲覧しました

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

次に、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 を使用することをお勧めします。

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

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



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート