Открыл для себя удивительную особенность классов в 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