Olá a todos. Estou enfrentando uma situação que não sei exatamente o motivo.
Ao criar a function do tipo _ _construct e atribuir o valor da propriedades privadas por ele, o VSCode está acusando um erro na propriedade $saldoTitular. Após tentar outras formas de escrever o código, descobri que se eu remover a tipagem 'float' lá na propriedade private da certo (no caso consigo atribuir o valor 0 dentro do $saldoTitular no construct), mas se tiver o float da erro.
Vou mandar abaixo a forma que deu errado e a forma que da certo, tentei pesquisar e entender o porque disso, mas ainda não consegui entender o motivo
Aimagem que mandei é a forma que da errado
FORMA QUE DEU CERTO:
<php?
class Conta
{
private string $cpfTitular;
private string $nomeTitular;
private $saldoTitular;
public function __construct(string $cpfTitular, string $nomeTitular)
{
$this->cpfTitular = $cpfTitular; //$cpfTitular
$this->nomeTitular = $nomeTitular; //$nomeTitular
$this->saldoTitular = 0; //$saldoTitular
}
public function sacar(float $valorASacar)
{
if ($valorASacar > $this->saldoTitular){
echo "Saldo insuficiente.";
return;
}
$this->saldoTitular -= $valorASacar;
}
public function depositar(float $valorADepositar)
{
if($valorADepositar <= 0){
echo "Valor a depositar precisar ser positivo" . PHP_EOL;
return;
}
$this->saldoTitular += $valorADepositar;
}
public function transferir(float $valorATransferir, Conta $contaDestino) : void
{
if($valorATransferir > $this->saldoTitular){
echo "Saldo indisponível";
return;
}
$this->sacar($valorATransferir);
$contaDestino->depositar($valorATransferir);
}
}
FORMA QUE DEU ERRADO:
<php?
class Conta
{
private string $cpfTitular;
private string $nomeTitular;
private float $saldoTitular;
public function __construct(string $cpfTitular, string $nomeTitular)
{
$this->cpfTitular = $cpfTitular; //$cpfTitular
$this->nomeTitular = $nomeTitular; //$nomeTitular
$this->saldoTitular = 0; //$saldoTitular
}
public function sacar(float $valorASacar)
{
if ($valorASacar > $this->saldoTitular){
echo "Saldo insuficiente.";
return;
}
$this->saldoTitular -= $valorASacar;
}
public function depositar(float $valorADepositar)
{
if($valorADepositar <= 0){
echo "Valor a depositar precisar ser positivo" . PHP_EOL;
return;
}
$this->saldoTitular += $valorADepositar;
}
public function transferir(float $valorATransferir, Conta $contaDestino) : void
{
if($valorATransferir > $this->saldoTitular){
echo "Saldo indisponível";
return;
}
$this->sacar($valorATransferir);
$contaDestino->depositar($valorATransferir);
}
}
Segue o erro (ignorem o numero da linha, pois removi caractere pra caber aqui):
Fatal error: Uncaught Error: Typed property Conta::$saldoTitular must not be accessed before initialization in C:\Users\adria\Desktop\CursoPHP\CursoPHP\3 - Orientação a Objetos com PHP Classes, métodos e atributos\src\ContaPrivate.php:67
Stack trace:
#0 C:\Users\adria\Desktop\CursoPHP\CursoPHP\3 - Orientação a Objetos com PHP Classes, métodos e atributos\bancoPrivate.php(6): Conta->depositar(500.0)
#1 {main}
thrown in C:\Users\adria\Desktop\CursoPHP\CursoPHP\3 - Orientação a Objetos com PHP Classes, métodos e atributos\src\ContaPrivate.php on line 67
PHP Fatal error: Uncaught Error: Typed property Conta::$saldoTitular must not be accessed before initialization in C:\Users\adria\Desktop\CursoPHP\CursoPHP\3 - Orientação a Objetos com PHP Classes, métodos e atributos\src\ContaPrivate.php:67
Stack trace:
#0 C:\Users\adria\Desktop\CursoPHP\CursoPHP\3 - Orientação a Objetos com PHP Classes, métodos e atributos\bancoPrivate.php(6): Conta->depositar(500.0)
#1 {main}
thrown in C:\Users\adria\Desktop\CursoPHP\CursoPHP\3 - Orientação a Objetos com PHP Classes, métodos e atributos\src\ContaPrivate.php on line 67