Olá, bom dia a todos.
Gostaria de saber o porquê de como o código está o terminal não conseguir converter o tipo string para o tipo Cpf, analizei e não cheguei a uma conclusão, a meu ver devia funcionar pois é semelhante a como o orientador Vinícius fez.
arquivo banco.php:
<?php
require_once "src/conta.php";
require_once "src/Titular.php";
require_once "src/Cpf.php";
$douglas = new Titular("Douglas Augusto");
$cpfDouglas = new Cpf("123.456.789-10");
$primeiraConta = new Conta($cpfDouglas, $douglas);
$stella = new Titular("Stella Britto");
$cpfStella = new Cpf("123.456.789-09");
$segundaConta = new Conta($cpfStella, $stella);
$barney = new Titular("Barney Cachorro");
$cpfBarney = new Cpf("321.654.987-01");
$terceiraConta = new Conta($cpfBarney, $barney);
$primeiraConta->deposita(1500);
$primeiraConta->saca(300);
echo $primeiraConta->mostraNomeTitular() . PHP_EOL;
echo $primeiraConta->mostraCpfTitular() . PHP_EOL;
echo $primeiraConta->mostraSaldo() . PHP_EOL;
var_dump($terceiraConta);
echo Conta::mostraNumeroDeContas();
arquivo conta.php:
<?php
class Conta
{
private $titular;
private $cpf;
private $saldo;
private static $numeroDeContas = 0;
public function __construct(Cpf $cpf, Titular $titular)
{
$this->titular = $titular;
$this->$cpf = $cpf;
$this->saldo = 0;
self::$numeroDeContas++;
}
public function __destruct()
{
if (self::$numeroDeContas > 2)
{
self::$numeroDeContas--;
}
}
public static function mostraNumeroDeContas() : int
{
return self::$numeroDeContas;
}
public function saca(float $valorASacar)
{
if ($this->saldo < $valorASacar)
{
echo "Você não pode sacar";
return;
}
$this->saldo -= $valorASacar;
}
public function deposita(float $valorADepositar)
{
if ($valorADepositar <= 0)
{
echo "Valor precisa ser maior";
return;
}
$this->saldo += $valorADepositar;
}
public function transfere(float $valorATransferir, Conta $contaDestino)
{
if ($valorATransferir > $this->saldo)
{
echo "Valor a transferir maior do saldo atual.";
return;
}
$this->saca($valorATransferir);
$contaDestino->deposita($valorATransferir);
}
public function mostraSaldo() : float
{
return $this->saldo;
}
public function defineTitular(string $titular)
{
$this->titular = $titular;
}
public function defineCpf($cpf)
{
$this->cpfTitular = $cpf;
}
public function mostraNomeTitular(): string
{
return $this->titular->mostraNome();
}
public function mostraCpfTitular(): string
{
return $this->cpf->mostraCpf();
}
}
arquivo Titular.php:
<?php
class Titular
{
private $nome;
public function __construct(string $nome) {
$this->validaNomeTitular($nome);
$this->nome = $nome;
}
private function validaNomeTitular($titular)
{
if (strlen($titular) < 5) {
echo "Nome precisa ter mais que 4 caracteres";
exit();
}
}
public function mostraNome() : string
{
return $this->nome;
}
}
arquivo Cpf.php:
<?php
class Cpf
{
private $cpf;
public function __construct(string $cpf)
{
$this->cpf = $cpf;
}
public function mostraCpf() : string
{
return $this->cpf;
}
}