<?php
abstract class Singleton {
// protected static $INSTANCE;
/**
* Protected constructor to prevent creating a new instance of the
* @return void
*/
final private function __construct() {
}
/**
* Private clone method to prevent cloning of the instance
* @return void
*/
final private function __clone() {
}
/**
* Private unserialize method to prevent unserializing
* @return void
*/
final private function __wakeup() {
}
/**
* The reference to *Singleton* instance of this class
* @return Singleton
*/
final public static function getInstance() {
return isset(static::$INSTANCE) ? static::$INSTANCE : static::$INSTANCE = new static;
}
}
////
class AB extends Singleton {
protected static $INSTANCE;
}
class BA extends Singleton {
protected static $INSTANCE;
}
$obj = AB::getInstance();
$obj2 = BA::getInstance();
var_dump($obj === AB::getInstance()); // bool true
var_dump($obj === $obj2); // bool false Availible also in https://gist.github.com/yuksbg/9d981ea6baf0bd8f2d92