echo $begrüßung;
Das Problem war, dass fragliche Properties in B nicht protected sondern private waren.
Kannst du mir erklären, warum das ganze nicht klappt, wenn $bar private ist? Ich hatte Vererbung bisher immer so verstanden, dass geerbte Methoden im Scope der Kindklasse, und nicht in dem der Elternklasse, aufgerufen werden - worans hier offensichtlich scheitert.
Nein, ich kann es nicht fundiert erklären, aber ich versuche es. PHPs OOP ist ein Aufsatz auf eine prozedurale Sprache. Manche Dinge funktionieren da anders als bei von vorn herein objektorientiert gestalteten Systemen. Wenn ich das richtig in Erinnerung habe, wird eine Methode quasi-statisch aufgerufen, also Class::method() und $this zeigt dabei auf die aktuelle Instanz. In deinem Fall kommt noch etwas Magie zum Einsatz, der Zugriff auf $b->bar resultiert in einem Aufruf von A::__get() mit einem auf $b zeigenden $this. $b->bar ist private, deswegen können nur Methoden von B darauf zugreifen. Was spricht in deinem Fall dagegen, $b->bar protected zu deklarieren? Bedenke dabei auch, dass die Zugriffsmodifizierer nicht für sicherheitsrelevante Zwecke gedacht sind, sondern vielmehr nur einen Hinweis zur vom ursprünglichen Autor vorgesehenen Verwendung darstellen.
echo "$verabschiedung $name";