私は通常、通常の非静的クラスを記述し、ファクトリクラスを使用してオブジェクトの単一の(sudo static)インスタンスをインスタンス化することを好みます。
このように、コンストラクタとデストラクタは通常どおりに機能し、必要に応じて追加の非静的インスタンスを作成できます(たとえば、2番目のDB接続)。
私はこれを常に使用しており、ページが終了するとデストラクタがセッションをデータベースにプッシュするため、カスタムDBストアセッションハンドラを作成するのに特に役立ちます。
もう1つの利点は、すべてがオンデマンドでセットアップされるため、呼び出す順序を無視できることです。
class Factory {
static function &getDB ($construct_params = null)
{
static $instance;
if( ! is_object($instance) )
{
include_once("clsDB.php");
$instance = new clsDB($construct_params); // constructor will be called
}
return $instance;
}
}
DBクラス...
class clsDB {
$regular_public_variables = "whatever";
function __construct($construct_params) {...}
function __destruct() {...}
function getvar() { return $this->regular_public_variables; }
}
どこでも使いたいだけ電話をかけて...
$static_instance = &Factory::getDB($somekickoff);
次に、すべてのメソッドを静的ではないものとして扱います(それらが静的であるため)
echo $static_instance->getvar();