是的,我们可以!
我有一个叫做singleton的抽象类…许多类扩展了单例类…这是代码:
abstract class Singleton {
private static $instances = array();
final private function __construct($_params) {
$class = get_called_class();
if (array_key_exists($class, self::$instances))
throw new Exception('An instance of '. $class .' already exists !');
//static::initialize(); //In PHP 5.3
$this->initialize($_params);
}
final private function __clone() { }
abstract protected function initialize();
public static function getInstance($_params=array()) {
$class = get_called_class();
if (array_key_exists($class, self::$instances) === false){
self::$instances[$class] = new $class($_params);
}
return self::$instances[$class];
}
}
以及(例如)从singleton扩展的类dbconnection
class DBConnection extends Singleton{
private $connexion_pdo=null;
protected function initialize(){
//connect to the DB
$this->connexion_pdo = blablalba;
}
}
尽管php5.2中有一些问题。特别是功能
get_called_class()
以及
static::initialize()
你也可以检查
php site for patterns
…单身汉有很多贡献
祝你好运