/* in lib */
abstract class single{
abstract public static function Singleton();
protected function __construct($params){}
}
/* in app */
class mySingle extends single {
public static function Singleton(){
return static::$instance?:static::$instance=new static(collectArguments());
}
}