Необычное поведение ОО? - PullRequest
       1

Необычное поведение ОО?

0 голосов
/ 15 февраля 2010

вот код php:

class A {
  private function action(){
    echo 1;
  }
  public static function callAction(A $a){
    $a->action();
  }
}

$a = new A;
A::callAction($a);

Может кто-нибудь объяснить мне, почему объектный метод видим из контекста статического метода, как следующий код работает на других языках ???

Ответы [ 2 ]

4 голосов
/ 15 февраля 2010

Ключевое слово private означает, что функция доступна из этого класса , а не из этого объекта . Поведение одинаково на всех языках, которые я знаю.

0 голосов
/ 15 февраля 2010

Поскольку ваш объект $ a передается как параметр в A :: callAction (), вы можете вызывать любой из его методов, статический или нет.

И как в A :: callAction (A) вы находитесь в реализации класса A, вы можете вызвать $ a-> action.

Простой? =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...