Após seguir os passos da aula, gerou um erro quando estava inserindo a classe "Titular".
Seguem abaixo meus códigos:
<?php
class Conta
{
private $titular;
private $saldo;
private static $numeroDeContas=0;
public function __construct(Titular $titular)
{
$this->titular=$titular;
$this->saldo = 0;
Conta::$numeroDeContas++; //no lugar de Conta, que é o nome da classe, é possível usar a palavra "self", que qeuivale ao "this"
//mas se refere à classe, e não aos objetos dentro da classe, que é função do "this".
}
public function __destruct ()
{
if(self::$numeroDeContas>2)
{
echo "Há mais de uma conta ativa".PHP_EOL;
}
}
public function recuperaNomeTitular(): string
{
return $this->titular->recuperaNome();
}
public function recuperaCpfTitular(): string
{
return $this->titular->recuperaCpf();
}
public function sacar(float $valorASacar):void
{
if ($valorASacar > $this->saldo)
{
echo "Saldo indisponível";
return;
}
$this->saldo -= $valorASacar;
}
public function depositar(float $valorADepositar): void
{
if ($valorADepositar <= 0)
{
echo "Valor precisa ser positivo";
return;
}
$this->saldo += $valorADepositar;
}
public function transferir(float $valorATransferir,Conta $contaDestino):void
{
if ($valorATransferir>$this->saldo)
{
echo "Saldo indisponível";
return;
}
$this->sacar($valorATransferir);
$contaDestino->depositar($valorATransferir);
}
public function recuperarSaldo(): float
{
return $this->saldo;
}
public static function recuperaNumeroTotalDeContas():int
{
return Conta::$numeroDeContas;
}
}
<?php
class Titular
{
private string $cpf;
private string $nome;
public function __construct(string $cpf, string $nome)
{
$this->cpf = $cpf;
$this->validaNomeTitular($nome);
$this->nome = $nome;
}
private function validaNomeTitular(string $nomeTitular):void
{
if (strlen($nomeTitular) < 5) {
echo "Nome precisa ter pelo menos 5 caracteres";
exit();
}
}
}
<?php
require_once 'src/Conta.php';
require_once 'src/Titular.php';
$primeiraConta = new Titular('123.456.789-10', 'Vinicius Dias');
$primeiraConta->depositar(500);
$primeiraConta->sacar(300); // isso é ok
echo $primeiraConta->recuperaNomeTitular() . PHP_EOL;
echo $primeiraConta->recuperaCpfTitular() . PHP_EOL;
echo $primeiraConta->recuperaSaldo() . PHP_EOL;
$segundaConta = new Titular('698.549.548-10', 'Patricia');
var_dump($segundaConta);
$outra = new Titular('123', 'Abcdefg');
echo Conta::recuperaNumeroTotalDeContas();
echo "Numero total de contas do banco é ", Conta::recuperaNumeroTotalDeContas().PHP_EOL;
Agora o retorno do erro:
PHP Fatal error: Uncaught Error: Call to undefined method Titular::depositar() in C:\Users\Joana\PHP Alura Projeto\banco.php:8
Stack trace:
#0 {main}
thrown in C:\Users\Joana\PHP Alura Projeto\banco.php on line 8
Fatal error: Uncaught Error: Call to undefined method Titular::depositar() in C:\Users\Joana\PHP Alura Projeto\banco.php:8
Stack trace:
#0 {main}
thrown in C:\Users\Joana\PHP Alura Projeto\banco.php on line 8
Não consegui identificar qual dos trechos do código está com problema. Parece problema com a função depositar, mas parece que está tudo ok com ela na classe Conta. E não entendi também qual a relação da função depositar com a classe Titular, que o erro está indicando.
Se alguém puder verificar e ajudar a corrigir, agradeço.