5
respostas

Colocar conta no parâmetro do método sacar()

Meu pensamento é o seguinte, para não ter que usar a variável de referência do objeto antes de chamar o método sacar, usar a conta como parâmetro dentro do método. Isso seria possível?

Não faz muita diferença na prática, só por curiosidade mesmo. Ficaria mais ou menos assim:

sacar ( $primeiraConta, 200);

Ao invés de usar o que estava na aula:

$primeiraConta -> sacar (200);
5 respostas

Gabriel, não entendi sua dúvida. Você quer criar uma função sacar fora da classe Conta? É isso? Por que?

O método sacar continuaria dentro da classe, entretanto sem precisar chamar a instância. Já vi esse tipo de sintaxe em outra linguagem e queria saber se no PHP poderia ser usado também. No fim das contas não faria diferença no tamanho do código, era mais curiosidade mesmo.

Gabriel, em que linguagem você viu essa sintaxe? Continuo não entendendo o que você está tentando fazer.

rsrsrs

Gabriel, caso eu tenha entendido bem sua dúvida, para o que você disse funcionar, você teria que criar a função sacar em uma outra classe que "realizasse o saque" e alterasse os valores da instância $primeiraConta, neste caso é possível sim.

Deste modo, sua função sacar deveria ter +/- a seguinte forma:


<?php

use App\Banco\Modelo\Conta\Conta;
use App\Banco\Modelo\Conta\SaldoInsuficienteException;

class OperacoesFinanceiras
{
    /**
     * @param Conta $conta
     * @param float $valorASacar
     */
    public function saca(Conta $conta, float $valorASacar): void
    {
        $tarifaDeSaque = $valorASacar * $conta->recuperaPercentualTarifa();
        $valorSaque = $valorASacar + $tarifaDeSaque;
        if ($valorSaque > $conta->recuperarSaldo()) {
            throw  new SaldoInsuficienteException($valorASacar, $conta->recuperarSaldo());
        }
        $conta->defineSaldo($conta->recuperarSaldo() - $valorSaque);
    }
}

E a chamada para ela ficaria algo como:

$conta = new ContaPoupanca(
        new Titular(
            new Cpf('123.456.789-10'),
            'Teste',
            new Endereco(
                'Teste',
                'Teste',
                'Teste',
                55)
        )
    );

    $operacao = new OperacoesFinanceiras();
    $operacao->saca($conta, 100);

Pelo o que entendi ele quer usar métodos estáticos da própria classe, para não precisar criar uma instância. Se for isso é possível sim e basta você declarar o método como static.

Exemplo:

class MinhaClasse
{

        public static function foo($x)
        {
                return $x;
        }

}

//para chamar o método foo basta fazer:

MinhaClasse::foo(5);

//isso irá retornar o número 5

Porém tenha cuidado com métodos estáticos, saiba quando realmente deva usar pq eles tem algumas limitações, por exemplo, não posso usar o $this dentro deles.