Просто чтобы прояснить - это не наследство. Test2 не расширяет Test1. Вы статически ссылались на открытый метод класса Test1.
Тем не менее, тот факт, что он возвращает «тест», по меньшей мере, интересен. И я вижу, откуда это порождает идею наследования.
Если вы не можете найти достойный ответ, я отправлю ваш код в виде ошибки.
UPDATE
Похоже, что под капотом, хотя вы статически ссылались на метод Test1, он все еще называется Test2. В конце концов, это неопределенное поведение, и заданный выше вопрос действительно выдает строгое предупреждение. Все еще очень странно, и я лично согласен, что это не должно работать. Но просто для того, чтобы немного больше понять, какой объект он использует.
class Test1 {
function getName() {
echo get_class($this);
return $this->name;
}
}
// ...
$test = new Test2;
echo $test->getName();
// echoes 'Test2 test'