Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Meu método mágico __get não funciona na hora de colocar um h2 em html

<?php

require "objeto.php";

echo "<h2> Contas Correntes </h2>";

$contaRodrigo = new ContaCorrente("Rodrigo", 0003, 012, 0);
$contaMaria = new ContaCorrente("Maria", 0001, 013, 10000);

$contaMaria->depositar(15000);
$contaRodrigo->depositar(5000);
$contaMaria->sacar(2000);
$contaMaria->transferir(2000, $contaRodrigo);

echo "<h2>Conta Corrente: Titular" .$contaMaria->getTitular()."</h2>";
var_dump($contaMaria);
var_dump($contaRodrigo);
echo "<pre>";

<?php

class ContaCorrente{ public $titular; public $agencia; public $conta; public $saldo;

public function __construct($titular,$agencia,$conta,$saldo){
    $this->titular = $titular;
    $this->agencia = $agencia;
    $this->conta = $conta;
    $this->saldo = $saldo;
}

public function sacar($valor){
    if($this->saldo > 0){
    $this->saldo = $this->saldo - $valor;
    } else {
        echo "você não possui cheque especial";
        return $this;
    }
}

public function depositar($valor){
    $this->saldo = $this->saldo + $valor;
    return $this;
}

public function transferir($valor, $conta){

    $this->sacar($valor);
    $conta->depositar($valor);
}

public function __get($atributo){
    return $this->$atributo;
}

} `

`Ao tentar usar o getTitular na conta da maria ele me retorna o seguinte erro: Fatal error: Uncaught Error: Call to undefined method ContaCorrente::getTitular() in C:\Users\Rodrigo\Documents\aplicação php\index.php:15 Stack trace: #0 {main} thrown in C:\Users\Rodrigo\Documents\aplicação php\index.php on line 15

1 resposta
solução!

Olá Rodrigo,

Um detalhe importante do __get e __set é que eles só são aplicados em propriedades inacessíveis (private por exemplo).

Além disso esses métodos vão ser chamados sempre que você escreve ou lê o valor da propriedade, então você não vai utilizar um método como o $contaMaria->getTitular(), você vai fazer o acesso direto à propriedade, exemplo:

// Escreve um valor: o __set vai ser chamado
$pessoa->nome = 'Rodrigo';

// Lê um valor: o __get vai ser chamado
echo $pessoa->nome;

Exemplo completo:

class Pessoa
{
    private $nome;

    public function __set($atributo, $valor)
    {
        echo "Chamando o set" . PHP_EOL;
        $this->nome = $valor;
    }

    public function __get($atributo)
    {
        echo "Chamando o get" . PHP_EOL;
        return $this->nome;
    }
}

$pessoa = new Pessoa;

$pessoa->nome = 'Rodrigo';
echo $pessoa->nome;

Resultado da execução:

Chamando o set
Chamando o get
Rodrigo