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

Class php8

Ola! Ao assistir ao video que ensina como declarar uma classe no PHP8 eu consegui fazer e funcionou. Porem eu não estou sabendo como evitar que o saldo seja atribuído na inicialização da classe.

class Conta {
    public function __construct(
        public string $nome,
        public string $cpf,
        private float $saldo = 0,
        ){ }
}

$primeiraConta = new Conta('nome', 'cpf', 1000) // assim consigo inicializar a conta com saldo de 1000.

Ao executar a classe desta maneira é possível adicionar um terceiro parâmetro que é o valor do saldo, mas o que queremos na verdade é que o saldo seja inicializado com valor 0.

Alguem pode me orientar por favor? att. Rafael

5 respostas

Olá Rafael, no construtor, você definiu:

private float $saldo = 0

Isso quer dizer que quando você instanciar o objeto, caso não seja passado nenhum valor de saldo, por padrão o saldo será 0.

Ou seja, se instanciar o objeto assim:

$primeiraConta = new Conta('nome', 'cpf', 1000)

A conta terá o valor 1000.

Se instanciar assim:

$primeiraConta = new Conta('nome', 'cpf')

O valor será por padrão 0.

Neste link , você poderá ver a questão de definir um valor padrão, ou seja, quando nenhum parâmetro for passado, será aquele valor!

Isso foi o que eu entendi, porem o que eu quero é que não seja possível passar nenhum valor para saldo, quero que seja sempre zero ao instanciar a classe

Olá, Rafael!

Acredito que neste caso você deva declarar a propriedade explicitamente e inicializá-la no construtor.

Exemplo:

<?php

class Conta
{
    private float $saldo;

    public function __construct(
        public string $nome,
        public string $cpf
    ) {
        $this->saldo = 0;
    }
}

$primeiraConta = new Conta('nome', 'cpf', 1000); // assim consigo inicializar a conta com saldo de 1000.
var_dump($primeiraConta);

Saída:

class Conta#1 (3) {
  private float $saldo =>
  double(0)
  public string $nome =>
  string(4) "nome"
  public string $cpf =>
  string(3) "cpf"
}

Dessa forma, mesmo que tente passar no construtor um novo valor para o saldo, este não será considerado.

Entendi sua dúvida Rafa. Neste caso, pode definir o valor de Saldo como 0 fora do contrutor.

class Conta {
    private float $saldo = 0;

    public function __construct(
        public string $nome,
        public string $cpf,
        ){ 
        }
}

$primeiraConta = new Conta('nome', 'cpf') // sempre será inicializado com saldo 0;
solução!

agora sim, tudo faz sentido kkkk obg!