<?php
class Foo {
static private $instances = [];
/**
* 禁止 new
*/
protected function __construct() {}
/**
* 禁止 clone
*/
final private function __clone() {}
final static public function getInstance() {
$class = get_called_class();
if (!isset(self::$instances[$class])) {
self::$instances[$class] = new static;
}
return self::$instances[$class];
}
}
class Bar extends Foo {
}
$foo = Foo::getInstance();
$bar = Bar::getInstance();