Я обычно предпочитаю писать обычные нестатические классы и использовать фабричный класс для создания экземпляров одного (sudo static) экземпляра объекта.
Таким образом, конструктор и деструктор работают как обычно, и я могу создать дополнительные нестатические экземпляры, если пожелаю (например, второе соединение с БД)
Я использую это все время, и это особенно полезно для создания пользовательских обработчиков сеансов хранилища БД, поскольку, когда страница заканчивается, деструктор отправляет сеанс в базу данных.
Еще одним преимуществом является то, что вы можете игнорировать порядок вызова, так как все будет настроено по требованию.
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;
}
}
Класс БД ...
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();