Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Cannot instantiate interface

Oi pessoal, beleza? Estou usando a versão 8.3 do PHP e o minha classe de NoProxyAbstractFactory ficou assim:

<?php

namespace CViniciusSDias\GoogleCrawler\Proxy;

use CViniciusSDias\GoogleCrawler\Proxy\HttpClient\GoogleHttpClient;
use CViniciusSDias\GoogleCrawler\Proxy\UrlParser\GoogleUrlParser;

class NoProxyAbstractFactory implements GoogleProxyAbstractFactory
{
    public function createGoogleHttpClient(): GoogleHttpClient 
    {
        return new GoogleHttpClient();
    }

    public function createGoogleUrlParser(): GoogleUrlParser 
    {
        return new GoogleUrlParser();
    }
}

Tanto na função para retornar um UrlParser quanto um HttpClient da um erro falando que suas classes não podem ser instanciadas. O que pode ser isso e como resolver?

1 resposta
solução!

Oi! Tudo bem?

O erro "Cannot instantiate interface" está ocorrendo porque você está tentando instanciar interfaces em vez de classes concretas. No PHP, interfaces não podem ser instanciadas diretamente; elas devem ser implementadas por classes concretas.

No seu caso, você mencionou as classes GoogleHttpClient e GoogleUrlParser. Certifique-se de que essas classes não são interfaces. Se elas forem interfaces, você precisa criar classes concretas que implementem essas interfaces e instanciar essas classes concretas em vez das interfaces.

Por exemplo, se GoogleHttpClient for uma interface, você precisaria de uma classe concreta, digamos ConcreteGoogleHttpClient, que implemente essa interface:

class ConcreteGoogleHttpClient implements GoogleHttpClient {
    // Implementação dos métodos da interface
}

E então, no seu método createGoogleHttpClient, você deve retornar a instância dessa classe concreta:

public function createGoogleHttpClient(): GoogleHttpClient 
{
    return new ConcreteGoogleHttpClient();
}

Faça o mesmo para GoogleUrlParser se for o caso. Verifique os arquivos de definição dessas classes para garantir que são classes concretas e não interfaces.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.