Вот таким чудом озадачили меня Фёдор (unno.ru) и mihailt.
class A { private function action(){ echo 1; } public static function callAction(A $a){ $a->action(); } } $a = new A; A::callAction($a);
Это работает.
Я сомневаюсь, что могу на 100% верно объяснить, почему оно работает.
Если вы сможете — обязательно напишите в комментариях.
update
Контекст модификаторов — класс, а не объект! И верно это для всех популярных реализаций ООП (на всякий случай проверили АS3 и Java).