私は解決できない非常に具体的な問題があります。PHPシングルトンクラス生涯ハック
私はいくつかのクラスから成るPHPシステムを持っています。それらのほとんどは汎用クラスで、自動ロードハンドラを使用してロードされ、グローバルスコープで手動で作成されます(新規演算子)。
しかし、1つのメインと非常に重要なシングルトンクラスもあります。これもグローバルスコープに存在し、最初に作成されます。私はそれが最後まで生きていたい。このクラス(最初に作成されたクラス)は最後に破棄する必要があります。
このクラスは、エラー処理クラスであり、それは、エラーを管理するために使用される唯一の2つのパブリックメソッドを持つ例外をキャッチし、終了を確認し、レポートを送信する、など
しかし、このクラスは、最初に破壊されます最初に作成されたものです。
クラスの寿命に影響を与え、他のすべてのクラスが終了した後で死に至る可能性はありますか?
ありがとうございました。
UPD 延長コードサンプル:
各クラス区切りファイルに定義されて
class longlive { // error processing class
private function __construct() {}
public static function initialize() {
self::$instance = new longlive();
}
public function __destruct() {
/// check for runtime session errors, send reports to administrators
}
public static function handler($errno, $errstr, $errfile = '', $errline = '', $errcontext = array()) {
/// set_error_handler set this method
/// process errors and store
}
public static function checkExit() {
/// register_shutdown_function will register this method
/// will trigger on normal exit or if exception throwed
/// show nice screen of death if got an uncoverable error
}
}
class some_wrapper {
public function __construct() {}
public function __destruct() {}
}
class core {
private function __construct() {
$this->wrapper = new some_wrapper();
}
public static function initialize() {
self::$core = new core();
}
}
スクリプト本体:あなたはを
include_once('path/to/longlive.php');
longlive::initialize();
include_once('path/to/core.php');
core::initialize();
「セキュリティ理由は非常に*聞こえないかもしれません...そして、私はあなたが依存性注入の背後にある概念を見ることをお勧めします:彼らはあなたのコーディングをずっと簡単にし、あなたのコードをより柔軟にするでしょう。 – lonesomeday
シングルトンによるセキュリティ?本当に?! – KingCrunch
あなたは非公開のセキュリティ上の理由を忘れて、クラスライフサイクルについて私に相談してください。ありがとう。 – ntvf