Singleton Class for WordPress Plugin
Forget everything but the instatiator, constructor and property, you don't call new static; you call new self(), then it jumps into the constructor, the way I do singleton is:

class Foo
{
    private static $init;

    private function __construct() {  }

    public static function init()
    {
        return static::$init = (
          null === static::$init ? new self() : static::$init  
        );
    }
}

$foo = Foo::init();


This makes it so when new self() is called, it jumps to the constructor and assigns self::$init to really be an instance of the class