error_reporting(E_ALL|E_STRICT); ini_set('display_errors', true); abstract class Singleton { private static $instances = array(); final public static function getInstance() { $class = get_called_class(); if (empty(self::$instances[$class])) { $rc = new ReflectionClass($class); self::$instances[$class] = $rc->newInstanceArgs(func_get_args()); } return self::$instances[$class]; } protected function __construct() {} final private function __clone() {} } class ConcreteSingleton extends Singleton { protected function __construct($string, Array $array) { echo __METHOD__ . '(' . $string . ', ' . print_r($array, true) . ')'; } } $test = ConcreteSingleton::getInstance('Hello World', array(1,2,3));