Aneb proč to dělat jednoduše, když to jde složitě
class Tata
{
abstract function getVar();
}
Z třídy, která má abstraktní metodu, nelze instanciovat objekt. (Pokud to v PHP jde, tak je to ještě větší sračka než jsem si dosud myslel.)
To, co je v tomto případě potřeba, je metoda
virtuální - to ale PHP neumožňuje. Proto ji normálně implementuj v rodičovské třídě s nějakým výchozím chováním (= vrátí výchozí hodnotu; např. prázdný řetězec (jedná-li se o řetězcovou proměnnou), 0 pokud je to číselná hodnota a sčítáš/odčítáš ji, 1 pokud násobíš ...), v extrémním případě výjimku nebo null. V potomkovi potom override a do komentáře k rodičovské třídě to napsat.
Nicméně v prvé řadě bych se zabýval otázkou "Pokud objekt jedné třídy potřebuje přistupovat k hodnotě potomka, proč jednoduše tuto hodnotu nedat do rodičovské třídy?" Pak se můžeš dostat do situace, kdy v metodách v předkovi bude tuna kódu zabývající se tím, jestli nějaká metoda je správně implementovaná či nikoliv a spíš než cokoliv jiného z toho může snadno vzniknout totální brajgl.
Měnit části chování pomocí abstraktních/virtuálních metod, to se dělá celkem často. Ale přistupovat z předka do proměnné v nějakém potomkovi ... to smrdí špatným návrhem.