Я зазвичай вважаю за краще писати звичайні нестатичні класи та використовувати заводський клас для інстанціювання одиночних (sudo статичних) екземплярів об'єкта.
Таким чином, конструктор і деструктор працюють у нормі, і я можу створювати додаткові нестатичні екземпляри, якщо хочу (наприклад, друге з'єднання БД)
Я використовую це постійно і особливо корисно для створення користувальницьких обробників сеансів зберігання БД, оскільки, коли сторінка припиняється, деструктор підштовхне сеанс до бази даних.
Ще одна перевага полягає в тому, що ви можете ігнорувати порядок дзвінка, оскільки все буде налаштовано на вимогу.
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();