Иногда программисты лучше объясняют вещи в коде, чем на английском!
Первое, что здесь происходит, это концепция перегрузки. Когда вы создаете экземпляр Bar, его метод getName () перегружает метод с тем же именем в Foo.
Перегрузка является мощной и важной частью OOD.
Однако часто полезно иметь возможность вызывать версию метода, существующего в классе Parent (Foo).
Вот пример:
class Dog
{
public function getTag()
{
return "I'm a dog.";
}
}
class Skip extends dog
{
public function getTag()
{
return Dog::getTag() . " My name is Skip.";
// I'm using Dog:: because it matches your example. However, you should use parent:: instead.
}
}
$o = new Skip();
echo $o->getTag(); // Echo's: "I'm a dog. My name is Skip."
Ясно, что это очень местный пример, но он иллюстрирует точку.
Ваш базовый класс является наиболее общей реализацией типа. В данном случае это «Собака». Вы хотите поместить в этот базовый класс информацию, общую для всех экземпляров этого типа. Это предотвращает дублирование в каждом из производных классов (например, «Пропустить»).
Ваш сценарий использует эту функцию, возможно, случайно.