It is possible to write a completely self-contained Singleton base class in PHP 5.3 using get_called_class.
<?php
abstract class Singleton {
protected function __construct() {
}
final public static function getInstance() {
static $aoInstance = array();
$calledClassName = get_called_class();
if (! isset ($aoInstance[$calledClassName])) {
$aoInstance[$calledClassName] = new $calledClassName();
}
return $aoInstance[$calledClassName];
}
final private function __clone() {
}
}
class DatabaseConnection extends Singleton {
protected $connection;
protected function __construct() {
// @todo Connect to the database
}
public function __destruct() {
// @todo Drop the connection to the database
}
}
$oDbConn = new DatabaseConnection(); // Fatal error
$oDbConn = DatabaseConnection::getInstance(); // Returns single instance
?>
Full write-up in Oct 2008: http://danbettles.blogspot.com
get_called_class
(No version information available, might be only in CVS)
get_called_class — the "Late Static Binding" class name
Description
string get_called_class
( void
)
Gets the name of the class the static method is called in.
Return Values
Returns the class name. Returns FALSE if called from outside a class.
Examples
Example #1 Using get_called_class()
<?php
class foo {
static public function test() {
var_dump(get_called_class());
}
}
class bar extends foo {
}
foo::test();
bar::test();
?>
The above example will output:
string(3) "foo" string(3) "bar"
get_called_class
danbettles at yahoo dot co dot uk
08-Oct-2008 02:00
08-Oct-2008 02:00
