Olá Vinícius,
Neste exercício acabei modificando um pouco o getter e o setter para acessar diretamente a propriedade ao invés de chamar os métodos recuperaPropriedade...
<?php
namespace Alura\Banco\Model;
/**
* Class Endereco
* @package Alura\Banco\Model
* @property string $cidade
* @property string $bairro
* @property string $rua
* @property string $numero
*/
final class Endereco
{
private string $cidade;
private string $bairro;
private string $rua;
private string $numero;
public function __construct(string $cidade, string $bairro, string $rua, string $numero)
{
$this->cidade = $cidade;
$this->bairro = $bairro;
$this->rua = $rua;
$this->numero = $numero;
}
public function __get(string $propriedade)
{
return $this->$propriedade;
}
public function __set($propriedade, $valor): void
{
$this->$propriedade = $valor;
}
public function __toString(): string
{
return "{$this->rua}, {$this->numero}, {$this->bairro}, {$this->cidade}";
}
}
<?php
use Alura\Banco\Model\Endereco;
require_once "vendor/autoload.php";
$endereco = new Endereco("Minha Cidade", "Centro", "Minha Rua", "384");
echo $endereco->cidade . PHP_EOL;
$endereco->cidade = "Cidade Qualquer";
echo $endereco->cidade . PHP_EOL;
Quanto a isso, fiquei com uma dúvida, qual a diferença entre a utilização do __get e __set em uma propriedade encapsulada como private para utilização de uma propriedade public e não implementar setters e getters?
Visto que em ambos os casos as propriedades podem ser modificadas de fora da classe.
Desde já agradeço pela atenção.