Оператор разрешения области видимости - Scope resolution operator

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

На некоторых языках, особенно на тех, на которых Модула-3 (включая Python и Идти ), модули объекты, а разрешение области видимости в модулях является частным случаем обычного доступа к члену объекта, поэтому обычный оператор метода . используется для разрешения области. Другие языки, особенно C ++ и Рубин, имеют как разрешение области видимости, так и доступ к методам, которые взаимодействуют по-разному; см. примеры ниже.

C ++

учебный класс А {общественный:    статический int я; // объем A};пространство имен B {    int j = 2;}  // пространство имен Bint А::я = 4;  // оператор области действия относится к целому числу i, объявленному в классе Aint Икс = B::j;  // оператор области действия относится к целому числу j, объявленному в пространстве имен B

PHP

В PHP, оператор разрешения области также называется Паамаим Некудотаим (иврит: פעמיים נקודותיים‎, выраженный[paʔaˈmajim nekudoˈtajim], второе слово - разговорная порча נקודתיים, выраженный[nekudoˈtajim][противоречивый ]), что означает «двойной двоеточие На иврите.

Название «Паамаим Некудотаим» было введено в израильский язык.[1] Zend Engine 0,5 используется в PHP 3. Хотя это сбивает с толку многих разработчиков, которые не говорят на иврите, он все еще используется в PHP 7, как в этом примере сообщения об ошибке:

$ php -r ::Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный T_PAAMAYIM_NEKUDOTAYIM

Аналогичная ошибка может также возникнуть, если отсутствует оператор разрешения области видимости. Например, попытка проверить, является ли константа пустой (), вызывает эту ошибку:

$ php -r 'define ("foo", "bar"); if (empty (foo)) echo "empty"; 'Ошибка синтаксического анализа: синтаксическая ошибка, непредвиденная ')', ожидается T_PAAMAYIM_NEKUDOTAYIM

Начиная с PHP 5.4, сообщения об ошибках, касающиеся оператора разрешения области видимости, по-прежнему включают это имя, но несколько поясняют его значение:

$ php -r ::Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный '::' (T_PAAMAYIM_NEKUDOTAYIM)

Есть и другие, менее очевидные способы вызвать ошибку, например, попытавшись использовать следующее недопустимое выражение PHP:

$ php -r static const $ а=1Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный конец файла, ожидание :: (T_PAAMAYIM_NEKUDOTAYIM)

Рубин

В Рубин разрешение области действия можно указать с помощью пространства имен (например, классы или модули).

модуль Пример  Версия = 1.0  учебный класс << себя # Мы получаем доступ к одноэлементному классу модуля    def Привет(ВОЗ = "Мир")      "Привет #{ВОЗ}"    конец  конецконец #/ПримерПример::Привет # => "Привет, мир"Пример.Привет "хакер" # => "Привет, хакер"Пример::Версия # => 1.0Пример.Версия # NoMethodError# Это иллюстрирует разницу между оператором сообщения (.) И оператором области видимости в Ruby (: :)# Мы можем использовать как :: hello, так и .hello, потому что hello является частью области действия Example и поскольку Example# отвечает на сообщение hello.## Мы не можем сделать то же самое с :: Version и .Version, потому что версия находится в рамках примера, но# Пример не может ответить на сообщение Version, так как нет способа ответить.

Объем также зависит от сигилы какие имена переменных предисловия:

Рекомендации

  1. ^ «Оператор разрешения области действия». Руководство по PHP 5. Получено 2007-08-09.

внешняя ссылка