Boa tarde, No meu prompt de comando estou conseguindo rodar o teste-saque.php quando está configurado para a classe Conta. Aqui está o arquivo teste-saque.php configurado para a classe Conta:
<?php
require_once 'autoload.php';
//use Alura\Banco\Modelo\Conta\ContaPoupanca;
use Alura\Banco\Modelo\Conta\Conta;
use Alura\Banco\Modelo\Conta\Titular;
use Alura\Banco\Modelo\Cpf;
use Alura\Banco\Modelo\Endereco;
$conta=new Conta(
new Titular(
new Cpf('123.456.789-10'),
'Fulano de tal',
new Endereco('cei','QNQ','ave branca','13')
));
$conta->depositar(500);
$conta->sacar(100);
echo $conta->recuperarSaldo();
?>
mas quando altero para a classe** ContaPoupança** ele dá o seguinte erro:
Aqui está o arquivo teste-saque.php configurado para a classe ContaPoupanca, que gera o erro pintado no cmd acima:
<?php
require_once 'autoload.php';
use Alura\Banco\Modelo\Conta\ContaPoupanca;
//use Alura\Banco\Modelo\Conta\Conta;
use Alura\Banco\Modelo\Conta\Titular;
use Alura\Banco\Modelo\Cpf;
use Alura\Banco\Modelo\Endereco;
$conta=new ContaPoupanca(
new Titular(
new Cpf('123.456.789-10'),
'Fulano de tal',
new Endereco('cei','QNQ','ave branca','13')
));
$conta->depositar(500);
$conta->sacar(100);
echo $conta->recuperarSaldo();
?>
Se eu habilito as duas classes ainda assim não dá. Eu já não sei mais onde estou errando, se alguém puder ajudar... Classe ContaPoupanca
<?php
namespace Alura\Banco\Modelo\Conta;
class ContaPoupanca extends Conta{
protected function percentualTarifa():float
{
return 0.03;
}
}
?>
Classe Conta:
<?php
//definição de conta e ninguém consegue criar uma conta se não for por este arquivo (forma=classe)
// instância e objeto são sinônimos
// classe=forma, novo objeto/instância=bolo, variável=prateleira
// nome das classes=substantivo, nome das funções=verbos
//C:\xampp\htdocs\alura
namespace Alura\Banco\Modelo\Conta;
use Alura\Banco\Modelo\Conta\Titular;
use Alura\Banco\Modelo\Cpf;
class Conta
{
private $titular;
private float $saldo;
private static $numeroDeContas = 0;
public function __construct(Titular $titular)
{
echo "Criando uma nova conta. \n" ;
$this->titular = $titular;
$this->saldo = 0;
self::$numeroDeContas++;
}
public function __destruct()
{
if (self::$numeroDeContas >2){
echo "há mais de uma conta ativa";
}
}
public function sacar(float $valorASacar)
{
$tarifaSaque= $valorASacar * $this->percentualTarifa();
$valorSaque= $valorASacar + $tarifaSaque;
if ($valorSaque> $this->saldo){
echo "Saldo indisponível.";
return;
}
$this->saldo -= $valorSaque;
}
public function depositar(float $valorADepositar): void
{
if ($valorADepositar <= 0){
echo "Valor precisa ser maior que zero.";
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 recuperaNumeroDeContas(): int
{
return self::$numeroDeContas;
}
public function recuperaCpfTitular():Cpf
{
return $this->titular->recuperaCpf();
}
public function recuperaNomeTitular():string
{
return $this->titular->recuperaNome();
}
protected function percentualTarifa():float
{
return 0.05;
}
}
?>
Desta forma, não consigo ver a herança funcionando. Estou usando o Visual Studio Code Versão 1.83.1 (user setup)