Variável estática dentro da função não pode conter referência a singleton

Eu notei um comportamento estranho com singletons no PHP, não há melhor maneira de explicar isso, mas com um exemplo.

Digamos que eu tenha a seguinte classe singleton:

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;
    }
}

E a seguinte função:

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

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

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

    return $Instance;
}

E quando eu uso o seguinte:

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

A saída é:

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

Como você pode ver, a referência salva dentro da função é perdida após a execução, mesmo que a variável seja estática. Observe também que a variável estática dentro do método de classe está funcionando bem.

Isso é normal ou estou fazendo algo errado?

questionAnswers(2)

yourAnswerToTheQuestion