Функции PHP Классы Методы Путаница - PullRequest
2 голосов
/ 16 сентября 2011

Сейчас я работаю над устаревшим кодом и наткнулся на странный вызов класса / функции, который php.net, похоже, не объясняет, и я никогда раньше не видел:

if(security::instance()->check_client()) {

Существует класс защиты, и внутри этого класса есть функции с именами instance и check_client. Но это, кажется, вызывает две функции в одном утверждении и передает одну другому, или, по крайней мере, так говорит результат. Может кто-нибудь уточнить это для меня?

Ответы [ 4 ]

3 голосов
/ 16 сентября 2011

Выполнение выглядит так:

  • сначала выполняется статический метод instance() класса security
  • возвращает экземпляр класса security (наиболее вероятно)
  • затем метод check_client выполняется для возвращаемого объекта

Итак, поскольку security::instance() является объектом, вы можете вызвать для него метод.

1 голос
/ 16 сентября 2011

Это классическая реализация одиночного шаблона

Я полагаю, ваш класс security выглядит так:экземпляр статического метода возвращает экземпляр класса security;Это означает, что security::instance() instanceof security === true

Вот почему вы можете связать вызов метода check_client () как в вашем примере

security::instance()->check_client()

Это похоже на

$secu = security::instance();
$secu->check_client();
1 голос
/ 16 сентября 2011

security: instance ()

- это статический вызов (так, вероятно, статический метод)

http://php.net/manual/en/language.oop5.static.php

, который возвращает экземплярнекоторого класса, который имеет метод-член check_client ()

, поэтому он возвращает объект, после чего вы можете вызвать любой открытый метод для этого объекта.

0 голосов
/ 16 сентября 2011

Я могу только предположить (поскольку я не знаю основной код), но это может объяснить вам.

Прежде всего функции могут возвращать объекты. Затем вы вызываете функцию объектов для возвращенного объекта:

security::instance()->check_client()

Так же, как:

$securityInstance = security::instance();
$securityInstance->check_client();

Кроме того, по имени instance я бы предположил, что security::instance() возвращает экземпляр класса безопасности, возможно, одноэлементную реализацию или фабрику на основе конфигурации приложений.

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