conversão implícita para string em vez de ficar “Object ID # ..”
Pergunta
Eu me mudei para um novo serviço de hospedagem foram temos php 5,1 em vez de 5,2 que eu tenho usado até agora. Eu ainda não descobri se é um problema de versão php ou configuração.
Agora a maioria (ou todos) das classes que têm __toString funções converter para "Object ID #" (como em php4), mas antes todos eles retornaram os valores corretos.
Como posso corrigir isso?
Solução
Aparentemente, antes de PHP 5.2 o método __toString
só foi "magicamente" chamado em determinadas circunstâncias (por exemplo echo()
e print()
). Então, se você está usando __toString()
em uma "mágica" caminho fora das funções de saída direta não vai funcionar como esperado.
Fonte :
É importante notar que antes do PHP 5.2.0 o método
__toString
só foi chamado quando foi directamente combinado comecho()
ouprint()
. desde o PHP 5.2.0, é chamado no contexto de cadeia (por exemplo, emprintf()
com%s
modificador), mas não em outros tipos contextos (por exemplo, com modificador%d
). Desde o PHP 5.2.0, objetos convertendo sem método__toString
para string causariaE_RECOVERABLE_ERROR
.
Outras dicas
Algumas empresas de acolhimento (como 1and1) executar tanto 4.x PHP 5.x e padrão para 4.x. Você pode precisar de ter um arquivo .htaccess que garante que você está usando a versão correta do PHP.
Além disso, o __toString mágica () é ligeiramente diferente da versão 5.2+ acordo com o documentação :
É importante notar que antes do PHP 5.2.0 o método __toString só era chamado quando foi diretamente combinado com echo () ou print (). Desde o PHP 5.2.0, é chamado no contexto de cadeia (por exemplo, em printf () com modificador% s), mas não em outros contextos tipos (por exemplo, com% d modificador). Desde o PHP 5.2.0, convertendo objetos sem método __toString para string causa E_RECOVERABLE_ERROR.
Assim, pode depender de como você está chamando a saída.