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?

Foi útil?

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 com echo() ou print(). desde o PHP 5.2.0, é chamado no contexto de cadeia (por exemplo, em printf() 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 causaria E_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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top