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

Duvida ao declarar atributos

Boa noite. Estou com problemas ao declarar atributos Uso o PHP versão 7.4.18 Fiz dois arquivos o conta.php.

<?php

class Conta
{
    private string $nomeDoTitular;
    private string $cpfDoTitular ;
    private float $saldo;

    public function __contruct(string $cpfDoTitular, string $nomeDoTitular)
    {
        $this->nomeDoTitular = $nomeDoTitular;
        $this->cpfDoTitular = $cpfDoTitular;
        $this->saldo = 0;
    }

    public function Sacar ($valorASacar): void
    {
        if($valorASacar > $this->saldo){
            echo "Saldo insuficiente";
            return;
        }
        $this->saldo -=$valorASacar;
    }

    public function depositar(float $valorADepositar): void
    {
        if($valorADepositar < 0){
            echo "O valor precisa ser positivo";
            return;
        }
        $this->saldo += $valorADepositar;
    }

    public function transferir (float $valorTransferir, Conta $contaDestino): void
    {
        if($valorTransferir > $this -> saldo){
            echo "Saldo insuficiente";
            return;
        }
        $this -> sacar ($valorTransferir);
        $contaDestino -> depositar ($valorTransferir);
    }

    public function defineCpfTitular(string $cpf)
    {
        $this->cpfDoTitular = $cpf;
    }

    public function defineNomeTitular(string $nome)
    {
        $this->nomeDoTitular = $nome;
    }

    public function mostraSaldo (): float 
    {
        return $this->saldo;
    }

    public function mostraCpf (): string 
    {
        return $this->cpfDoTitular;
    }

    public function mostraNome (): string 
    {
        return $this->nomeDoTitular;
    }
}

E o banco.php

<?php

require_once 'src/Conta.php';

$primeiraConta = new Conta('153.170.723-12','Jose');
$primeiraConta->depositar(500);
$primeiraConta->sacar(200);


echo $primeiraConta->mostraSaldo();
echo $primeiraConta->mostraCpf();
echo $primeiraConta->mostraNome();

Porém quando eu tento executar o arquivo banco.php ele apresenta um erro fatal: Uncaught Error: Typed property Conta::$saldo must not be accessed before initialization in C:\Users\flore\Documents\Estudos\Alura\PHP\php-primeiros-passos\projeto\src\Conta.php:31 como se eu não pudesse acessar os dados antes de serem inicialisados. Porque nessa versão do PHP quando você não atribui nenhum valor inicial ao atributo ele vem como unable se não me engano. Quando eu vou ao meu arquivo conta.php e atribuo valores iniciais aos meus atributos como exemplo

class Conta
{
    private string $nomeDoTitular='';
    private string $cpfDoTitular='' ;
    private float $saldo=0;

Ele volta a rodar de boa. Queria saber se tem alguma forma de usar eles sem ter que atribuir esses valores de inicio ou se estou fazendo algo errado.

Agradeço desde já . Ah obs: Eu descrevi a falha de 1 atributo somente la em cima, mas ele acontece com todos os atributos.

2 respostas
solução!

Olá, Lucas!

O código do construtor da classe tem um erro simples:

public function __contruct(string $cpfDoTitular, string $nomeDoTitular)
    {
        $this->nomeDoTitular = $nomeDoTitular;
        $this->cpfDoTitular = $cpfDoTitular;
        $this->saldo = 0;
    }

Troque a instrução

__contruct

para

__construct

Espero ter ajudado.

Abs

Vish passou despercebido hahaha valeu! Muito obrigado mesmo