PHP観察者モードを用いて異常情報を処理する方法の詳細
4343 ワード
この例では,PHPがオブザーバモードを用いて異常情報を処理する方法について述べる.皆さんの参考にしてください.具体的には以下の通りです.
異常情報のキャプチャはプログラミングテストに重要な意義を持ち,ここでは観察者モードと結びつけて異常情報をどのように処理するかを探索する.
オブザーバーモードについては、まだ触れていなければ、ブログ園には優秀なブロガーがたくさんいて詳しく説明してくれました.筆者は,観察者パターンとは,一つのテーマオブジェクト,複数の観察者の2つの重要な構成部分が必要であると考えている.使用するときは、観察者をプラグのようにトピックオブジェクトというコンセントに差し込み、トピックオブジェクトを利用して対応する機能を果たすことができます.
観察者がプラグとして使う以上、同じコンセントに差し込むには統一した口径が必要なので、まずインタフェースを定義し、Exception_Observer.php:
多くの観察者に対して、私たちはまず唯一のテーマオブジェクト、Observer_に注目しなければならない.Exception.php:
静的変数$observersは挿入されたオブジェクトを配置するために使用され、notify()はすべてのオブジェクトに通知するために使用されます.
ここでは
1つの小さな問題:
2人の観察者を定義し,インタフェースで定義された機能を原則として実現する.
Email_Exception_Observer.php:
Logging_Exception_Observer.php:
あるべきボディオブジェクトとプラグインをすべて設計し、小さなテストを行います.
この例では、まず観察者をロードし、その後、他の操作を行います.上記の質問に戻りますが、
この例では、出力は一般的なものと変わりませんが、カスタムファイルで対応するログが生成されているのとは異なります.最後に実現される機能はどんなに簡単であっても,より少ないコードでより簡単な方法で実現できる人が多いが,より複雑なシステムを実現する場合,観察者モードは我々に大きな便利さをもたらす.
PHPについてもっと兴味のある読者は、「phpオブジェクト向けプログラミング入門チュートリアル」、「PHP配列(Array)操作テクニック大全」、「PHP基本文法入門チュートリアル」、「PHP演算と演算子用法総括」、「php文字列(string)用法総括」、「php+mysqlデータベース操作入門チュートリアル」および「php一般データベース操作テクニック要約」
ここで述べたことが皆さんのPHPプログラム設計に役立つことを願っています.
異常情報のキャプチャはプログラミングテストに重要な意義を持ち,ここでは観察者モードと結びつけて異常情報をどのように処理するかを探索する.
オブザーバーモードについては、まだ触れていなければ、ブログ園には優秀なブロガーがたくさんいて詳しく説明してくれました.筆者は,観察者パターンとは,一つのテーマオブジェクト,複数の観察者の2つの重要な構成部分が必要であると考えている.使用するときは、観察者をプラグのようにトピックオブジェクトというコンセントに差し込み、トピックオブジェクトを利用して対応する機能を果たすことができます.
観察者がプラグとして使う以上、同じコンセントに差し込むには統一した口径が必要なので、まずインタフェースを定義し、Exception_Observer.php:
多くの観察者に対して、私たちはまず唯一のテーマオブジェクト、Observer_に注目しなければならない.Exception.php:
notify();
}
public function notify(){
foreach (self::$_observers as $observer) {
$observer->update($this);
}
}
}
静的変数$observersは挿入されたオブジェクトを配置するために使用され、notify()はすべてのオブジェクトに通知するために使用されます.
ここでは
$observer->update($this);
のうち$this
の使い方に注意が必要ですが、多くの初心者は「$this
でも使えるのかな」と感じています.1つの小さな問題:
$_observers
は静的変数ではありませんか?この質問は後で答えます.2人の観察者を定義し,インタフェースで定義された機能を原則として実現する.
Email_Exception_Observer.php:
class Emailing_Exception_Observer implements Exception_Observer{
protected $_email="[email protected]";
function __construct($email=null)
{
if ($email!==null&&filter_var($email,FILTER_VALIDATE_EMAIL)) {
$this->_email=$email;
}
}
public function update(Observer_Exception $e){
$message=" ".date("Y-m-d H:i:s").PHP_EOL;
$message.=" ".$e->getMessage().PHP_EOL;
$message.=" ".$e->getTraceAsString().PHP_EOL;
$message.=" ".$e->getFile().PHP_EOL;
$message.=" ".$e->getLine().PHP_EOL;
error_log($message,1,$this->_email);
}
}
Logging_Exception_Observer.php:
_filename=$filename;
}
}
public function update(Observer_Exception $e){
$message=" ".date("Y-m-d H:i:s").PHP_EOL;
$message.=" ".$e->getMessage().PHP_EOL;
$message.=" ".$e->getTraceAsString().PHP_EOL;
$message.=" ".$e->getFile().PHP_EOL;
$message.=" ".$e->getLine().PHP_EOL;
error_log($message,3,$this->_filename);
}
}
あるべきボディオブジェクトとプラグインをすべて設計し、小さなテストを行います.
getMessage();
echo "";
}
?>
この例では、まず観察者をロードし、その後、他の操作を行います.上記の質問に戻りますが、
$_observers
は静的変数ではありませんか?答えはだめです.$_observers
が静的変数でない場合、ロードされた観察者の挙動は、後続の動作に影響を及ぼさない.static
は、すべてのインスタンスメンバーに変数を共有させます.クラス継承でも同様に有効です.興味のある人はstaticの不思議な役割を探し続けることができるでしょう.この例では、出力は一般的なものと変わりませんが、カスタムファイルで対応するログが生成されているのとは異なります.最後に実現される機能はどんなに簡単であっても,より少ないコードでより簡単な方法で実現できる人が多いが,より複雑なシステムを実現する場合,観察者モードは我々に大きな便利さをもたらす.
PHPについてもっと兴味のある読者は、「phpオブジェクト向けプログラミング入門チュートリアル」、「PHP配列(Array)操作テクニック大全」、「PHP基本文法入門チュートリアル」、「PHP演算と演算子用法総括」、「php文字列(string)用法総括」、「php+mysqlデータベース操作入門チュートリアル」および「php一般データベース操作テクニック要約」
ここで述べたことが皆さんのPHPプログラム設計に役立つことを願っています.