Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida sobre um erro de declaração de uma variável

Bom dia, estou em dúvida sobre um erro que aconteceu comigo fazendo os códigos:

Eu declarei como string a variável $titular, só que quando criei a função recuperaTitular na parte do $this->titular->recuperaNome(); ele da erro dizendo que a Conta::$titular deve ser string, não entendi o porque que aconteceu isso pois era pra ser string, ao remover a declaração string na variável $titular ela funcionou normalmente, queria entender o porque aconteceu isso.

Eu sei que não estava na aula essas declarações, mas resolvi fazer por boas práticas e/ou segurança, mas fiquei confuso o porque aconteceu esse erro.

class Conta
{
//removendo string do private $titular funciona normalmente

    private string $titular;
    private float $saldo;
    private static int $numeroDeContas = 0;

    public function __construct(Titular $titular)
    {

        $this->titular = $titular;
        $this->saldo = 0;

        Conta::$numeroDeContas++;
    }

//(...)

public function recuperaTitular(): string
    {
        return $this->titular->recuperaNome();
    }   
}
3 respostas

Está dando erro pois Titular é uma classe não uma string , para não ocorrer você pode implementar o metodo toString que ira converter o Objeto Titular em uma string

solução!

Ygor, repara o que você está fazendo:

class Conta
{
    private string $titular; // Aqui você diz que $titular é uma string
    // ...
    public function __construct(Titular $titular) // Aqui você recebe um objeto do tipo Titular
    {

        $this->titular = $titular; // Aqui você está tentando atribuir à propriedade $titular (que é uma string) o objeto do tipo Titular. Isso não faz sentido.

        // ...

    public function recuperaTitular(): string
    {
        return $this->titular->recuperaNome(); // Aqui você tenta acessar um método da propriedade $titular, sendo que você disse que ela é uma string.
    }  

O tipo da propriedade não deve ser string e sim Titular, entende?

Entendi, tinha esquecido que a propriedade era Titular, entendi o erro, valeu a ajuda Samara e Vinicius.