Обратное обращение к protected полям класса

Открыл для себя удивительную особенность классов в PHP.

Базовый класс может так-же спокойно обращаться к полям наследника в обратном направлении, вообще без всяких проблем. Чего я не видел в других языках программирования.

untitled2.php
<?php
 
abstract class UserFunctions
{
 
    function getName()
    {
        return $this->firstname . ' ' . $this->lastname;
    }
 
}
 
class User extends UserFunctions
{
 
    protected $firstname; # Cannot be private!
    protected $lastname;  # Private scope only inside $this class

    function __construct()
    {
        $this->firstname = "Vasilij";
        $this->lastname = "Pupkin";
    }
}
 
$u = new User();
echo $u->getName(); # Result is 'Vasilij Pupkin' witout scope errors