Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Modificar saldo da conta através da função

Boa tarde amigos, agora que estou aprendendo PHP eu sempre comparo a sintaxe com JavaScript que é atualmente a linguagem que eu entendo trabalho mais, fiz esse código abaixo do lado esquerdo o JavaScript e no VScode o PHP.

Porque eu devo pegar a conta $contasCorrentes['123.456.789-11'] e igualar ela a função sacar($contasCorrentes['123.456.789-11'], 500); sendo que nos argumentos dessa função eu estou passando novamente a conta $contasCorrentes['123.456.789-11']. Não fica muita repetição de código?

Tentei deixar o código somente assim: sacar($contasCorrentes['123.456.789-11'], 500); não deu erro, porém não trocou o saldo da conta da Maria.. fiquei meio confuso nessa atribuição $contasCorrentes['123.456.789-11'] = sacar($contasCorrentes['123.456.789-11'], 500);

Não sei se me expressei muito bem mas em resumo, porque no JavaScript eu consigo chamar a funcão direto e alterar o valor da conta de Maria por exemplo, e no PHP eu tenho que atribuir a uma variável? Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Oi, Frank

No PHP também pode


<?php
$contasCorrentes = [
    '123.456.789-10' => [
        'titular' => 'Vinicius',
        'saldo' => 10000],
    '123.456.789-11' => [
        'titular' => 'Maria',
        'saldo' => 10000
    ],
    '123.456.789-12' => [
        'titular' => 'João',
        'saldo' => 300
    ]
];

function sacar(&$conta, $valorSaque) {
    if ($conta['saldo'] < $valorSaque){
        echo "Você não pode sacar este valor" . PHP_EOL;
        return;
    }
    $conta['saldo'] -= $valorSaque; 
    echo "Saque realizado com sucesso!" . PHP_EOL;   
}

sacar($contasCorrentes['123.456.789-10'], 1500); // Vinicius 
sacar($contasCorrentes['123.456.789-11'], 5000); // Maria 
sacar($contasCorrentes['123.456.789-12'], 500); // João 

foreach($contasCorrentes as $chave => $conta)  
    echo "$chave : {$conta['titular']} {$conta['saldo']}" . PHP_EOL;
  Caso este post tenha lhe ajudado, marque-o como solução . Bons Estudos!  🤓
solução!

Não sei se me expressei muito bem mas em resumo, porque no JavaScript eu consigo chamar a funcão direto e alterar o valor da conta de Maria por exemplo, e no PHP eu tenho que atribuir a uma variável?

No seu código JS você está passando um objeto por parâmetro. No PHP você está passando um array. São coisas diferentes. Se você passar um objeto por parâmetro em PHP, ele também é modificável, já que é uma referência. Isso vai ser ensinado nos cursos de Orientação a Objetos.

Mas, para o seu exemplo, tanto na resposta do Luis quanto nessa aula há uma solução, que é passar o parâmetro por referência, mesmo não sendo um objeto. :-D

PS.: Tome cuidado com comparações. Os 2 códigos estão atingindo o mesmo objetivo, mas fazendo coisas bem diferentes por baixo dos panos. É sempre importante entender como cada ecossistema se comporta e como os problemas são resolvidos de formas diferentes em linguagens diferentes. :-D