PHP 5.3允許通過后期靜態(tài)綁定創(chuàng)建可繼承的Singleton類:
class Singleton{
protected static $instance = null;
protected function __construct()
{
//Thou shalt not construct that which is unconstructable!
}
protected function __clone()
{
//Me not like clones! Me smash clones!
}
public static function getInstance()
{
if (!isset(static::$instance)) {
static::$instance = new static;
}
return static::$instance;
}}
這解決了這個(gè)問題,在PHP5.3之前,任何擴(kuò)展Singleton的類都會(huì)生成它的父類的實(shí)例,而不是它自己的實(shí)例。
現(xiàn)在你可以:
class Foobar extends Singleton {};$foo = Foobar::getInstance();
$foo將是Foobar的實(shí)例,而不是Singleton的實(shí)例。