abstract class Ass { // singleton static private $instances = array(); // assoc array with one single instance for every class static public function getInstance() { $c = get_class(); // I'm desparate for $c to be "Hole" if(!isset(self::$instances[$c])) { self::$instances[$c] = new $c(); } return self::$instances[$c]; } } class Hole extends Ass { } $asshole = Hole::getInstance();