o exemplo que tu passou é algo que existe desde de o PHP 5. property hooks é outra coisa, algo como C# torna mais eficiente algo que já era possivel literalmente 20 anos.
PHP 5.0 (2004)
class Foo
{
private $data = [];
public function __set($name, $value)
{
if ($name === 'bar') {
$this->data[$name] = strtolower($value);
}
}
public function __get($name)
{
if ($name === 'bar') {
return strtoupper($this->data[$name]);
}
}
}
PHP 8.4 (2024)
class Foo
{
public string $bar {
get => strtoupper($this->username);
set => strtoupper($value);
}
}