Статическая переменная внутри функции не может содержать ссылку на синглтон

Я заметил странное поведение с синглетонами в PHP, нет лучшего способа объяснить это, но на примере.

Допустим, у меня есть следующий класс синглтона:

class Singleton
{
    protected function __construct()
    {
        // Deny direct instantion!
    }
    protected function __clone()
    {
        // Deny cloning!
    }
    public static function &Instance()
    {
        static $Instance;

        echo 'Class Echo'.PHP_EOL;
        var_dump($Instance);

        if (!isset($Instance)) {
            $Instance = new self;
        }

        return $Instance;
    }
}

И следующая функция:

function Test($Init = FALSE)
{
    static $Instance;

    if ($Init === TRUE && !isset($Instance)) {
        $Instance =& Singleton::Instance();
    }

    echo 'Function Echo'.PHP_EOL;
    var_dump($Instance);

    return $Instance;
}

И когда я использую следующее:

Test(TRUE);
Test();
Singleton::Instance();

Выход:

Class Echo
NULL
Function Echo
object(Singleton)#1 (0) {
}
Function Echo
NULL
Class Echo
object(Singleton)#1 (0) {
}

Как вы можете видеть, сохраненная ссылка внутри функции теряется после выполнения, даже если переменная является статической. Также обратите внимание, что статическая переменная внутри метода класса работает нормально.

Это должно быть нормально, или я делаю что-то не так?

Ответы на вопрос(2)

Ваш ответ на вопрос