Chamada de function PHP na propriedade de class

Por que não posso fazer isso em PHP? Onde o Database é uma class singleton e getInstance () retorna um object PDO.

 query("SELECT * FROM blah"); reutrn $stmt->fetch(); } } 

“Como qualquer outra variável estática do PHP, as propriedades estáticas só podem ser inicializadas usando um literal ou constante; as expressões não são permitidas. Então, enquanto você pode inicializar uma propriedade estática para um inteiro ou uma matriz (por exemplo), você não pode inicializá-la para outra variável, a um valor de retorno da function ou a um object “.

http://php.net/manual/en/language.oop5.static.php

Por quê?!

http://php.net/language.oop5.properties

As variables ​​dos membros da class são chamadas de “propriedades”. Você também pode vê-los referenciados usando outros termos como “atributos” ou “campos”, mas para os fins desta referência, usaremos “propriedades”. Eles são definidos usando uma das palavras-chave pública, protegida ou privada, seguida de uma declaração de variável normal. Esta declaração pode include uma boot, mas essa boot deve ser um valor constante – isto é, deve ser capaz de ser avaliado em tempo de compilation e não deve depender de informações de tempo de execução para serem avaliadas.

A parte importante é

ou seja, deve poder ser avaliado em tempo de compilation

As expressões foram avaliadas em tempo de execução, portanto, não é possível usar a expressão para inicializar propriedades: elas ainda não são avaliáveis ​​ainda.

Você não pode executar o código para produzir o valor de uma variável estática, pois, por definição, as variables ​​estáticas são afetadas no tempo de compilation, veja:

Obter o valor de tempo de execução de uma variável, ou chamar uma function (tempo de execução também) não pode ser feito em tempo de compilation para que eles não possam ser afetados a variables ​​estáticas.

RTM;)

Veja a última frase do primeiro parágrafo na documentação do PHP para propriedades http://www.php.net/manual/en/language.oop5.properties.php

Esta declaração pode include uma boot, mas essa boot deve ser um valor constante – isto é, deve ser capaz de ser avaliado em tempo de compilation e não deve depender de informações de tempo de execução para serem avaliadas.