Все, что вам нужно - это смена одного слова!
Проблема в том, как вы называете whereami () вместо self:: вы должны использовать static :: .Поэтому класс Foo должен выглядеть следующим образом:
class Foo {
public static function foobar() {
static::whereami();
}
protected static function whereami() {
echo 'foo';
}
}
Другими словами, «static» фактически делает вызов whereami () dynamic :) - это зависитв каком классе находится вызов.