вот код php:
class A { private function action(){ echo 1; } public static function callAction(A $a){ $a->action(); } } $a = new A; A::callAction($a);
Может кто-нибудь объяснить мне, почему объектный метод видим из контекста статического метода, как следующий код работает на других языках ???
Ключевое слово private означает, что функция доступна из этого класса , а не из этого объекта . Поведение одинаково на всех языках, которые я знаю.
private
Поскольку ваш объект $ a передается как параметр в A :: callAction (), вы можете вызывать любой из его методов, статический или нет.
И как в A :: callAction (A) вы находитесь в реализации класса A, вы можете вызвать $ a-> action.
Простой? =)