Segue minha solução para o desafio do método __set!
Eu não usei a mesma classe 'Endereco' que estava sendo utilizada durante o curso, pois acho que aprendo mais ao tentar reescrever de outra forma os exercícios propostos.
<?php
class Address
{
private string $city;
private string $street;
public function __construct(string $cityName, string $streetName)
{
$this->city = $cityName;
$this->street = $streetName;
}
public function getCity(): string
{
return $this->city;
}
public function setCity(string $cityName): void
{
$this->city = $cityName;
}
public function getStreet(): string
{
return $this->street;
}
public function setStreet(string $streetName): void
{
$this->street = $streetName;
}
public function __set($attrName, $attrValue): void
{
$method = 'set' . ucfirst($attrName);
$this->$method($attrValue);
}
public function __get(string $attrName)
{
$method = 'get' . ucfirst($attrName);
return $this->$method();
}
}