Problema
ReactPHP 1.x usa PSR HTTP Message 1.x, enquanto PivotPHP Core usa PSR HTTP Message 2.0. Isso causa um conflito fatal no PHP:
Fatal error: Declaration of React\Http\Io\AbstractMessage::getProtocolVersion()
must be compatible with Psr\Http\Message\MessageInterface::getProtocolVersion(): string
Tentativas de Solução
1. Adapter de Compatibilidade ❌
- Tentativa: Criar um adapter que envolve as mensagens ReactPHP
- Resultado: O erro ocorre antes do adapter ser usado, durante o carregamento das classes
- Motivo: Conflito de declaração de interface no PHP
2. Server Compatível ❌
- Tentativa: Criar um servidor que evita usar as interfaces PSR-7
- Resultado: ReactPHP HTTP Server ainda precisa carregar suas classes PSR-7
- Motivo: Dependência interna do ReactPHP
Atualizar PivotPHP Core
Fazer PivotPHP Core suportar ambas as versões de PSR-7:
{
"require": {
"psr/http-message": "^1.0 || ^2.0"
}
}
Isso permite:
- ✅ Compatibilidade com ReactPHP
- ✅ Compatibilidade com bibliotecas modernas
- ✅ Não requer projetos separados
- ✅ Solução elegante e sustentável
Implementação
- Atualizar composer.json do PivotPHP Core:
"require": {
"psr/http-message": "^1.0 || ^2.0"
}
- Ajustar type hints condicionalmente:
// Detectar versão do PSR-7
$psr7Version = \Composer\InstalledVersions::getVersion('psr/http-message');
$isPsr7v2 = version_compare($psr7Version, '2.0', '>=');
// Usar type hints apropriados
if ($isPsr7v2) {
// Código com type hints strict
} else {
// Código sem type hints strict
}
- Criar classes compatíveis:
// Base class que funciona com ambas versões
abstract class AbstractMessage implements MessageInterface
{
public function getProtocolVersion() // Sem type hint de retorno
{
return $this->protocolVersion;
}
}
Conclusão
A incompatibilidade PSR-7 é um problema conhecido na comunidade PHP. A melhor solução é fazer o PivotPHP Core suportar ambas as versões, permitindo que os usuários escolham qual usar baseado em suas necessidades.
Problema
ReactPHP 1.x usa PSR HTTP Message 1.x, enquanto PivotPHP Core usa PSR HTTP Message 2.0. Isso causa um conflito fatal no PHP:
Tentativas de Solução
1. Adapter de Compatibilidade ❌
2. Server Compatível ❌
Atualizar PivotPHP Core
Fazer PivotPHP Core suportar ambas as versões de PSR-7:
{ "require": { "psr/http-message": "^1.0 || ^2.0" } }Isso permite:
Implementação
Conclusão
A incompatibilidade PSR-7 é um problema conhecido na comunidade PHP. A melhor solução é fazer o PivotPHP Core suportar ambas as versões, permitindo que os usuários escolham qual usar baseado em suas necessidades.