*Classe Titular *
<?php
class titular
{
private $cpf;
private string $nome;
public function __construct(cpf $cpf , string $nome )
{
$this->cpf=$cpf;
$this->validatitular($nome);
$this->nome=$nome;
}
public function recuperaCpf()
{
return $this->cpf->recuperaNumero();
}
public function recuperaNome(){
return $this->nome;
}
private function validatitular($titular){
if (strlen($titular) < 5){
echo "Nome precisa ter pelo menos 5 caracteres";
exit;
}
}
}
Classe CPF
<?php
class CPF
{
private $numero;
public function __construct(string $numero)
{
$numero = filter_var($numero, FILTER_VALIDATE_REGEXP, [
'options' => [
'regexp' => '/^[0-9]{3}\.[0-9]{3}\.[0-9]{3}\-[0-9]{2}$/'
]
]);
if ($numero === false) {
echo "Cpf inválido";
exit();
}
$this->numero = $numero;
}
public function recuperaNumero()
{
return $this->numero;
}
}
Classe Conta
<?php
class Conta{
private $titular;
private $saldo;
private static $numeroDeContas = 0; // foi criado um atributo para a class.
public function __construct(titular $titular){
$this->titular=$titular;
$this->saldo = 0;
self::$numeroDeContas++;
}
public function __destruct()
{
if (self::$numeroDeContas > 2)
{
self::$numeroDeContas--.PHP_EOL;
}
}
public function sacar(float $valorSacar)
{
if( $valorSacar >$this->saldo){
echo "saque indisponivel";
return;
}
$this->saldo -= $valorSacar;
}
public function depositar ( float $ValorDeposito): void
{
if($ValorDeposito <= 0){
echo "Valores incompatives";
return;
}
$this->saldo += $ValorDeposito;
}
public function transferir ( float $valorTransferir, $contaDestino): void
{
if ($valorTransferir > $this->saldo){
echo "SEM LIMITES";
return;
}
echo PHP_EOL;
$this->sacar($valorTransferir);
$contaDestino->depositar($valorTransferir);
}
public function recuperaSaldo()
{
return $this->saldo;
}
public function recuperaNomeTitular()
{
return $this->titular->recuperaNome();
}
public function recuperacpfTitular()
{
return $this->cpf->recuperaNumero();
}
public static function MostrarContas ()
{
return self::$numeroDeContas;
}
}
ERRO!