我通常更喜欢编写常规的非静态类并使用工厂类来实例化对象的单个(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();