В программировании область действия — это охватывающий контекст, в котором связаны значения и выражения . Оператор разрешения области действия помогает идентифицировать и указать контекст, на который ссылается идентификатор , в частности, указывая пространство имен или класс . Конкретные варианты использования различаются в зависимости от языка программирования в зависимости от понятий области действия. Во многих языках оператор разрешения области действия записывается как ::
.
В некоторых языках, особенно в тех, которые повлияли на Modula-3 (включая Python и Go ), модули являются объектами , а разрешение области действия внутри модулей является особым случаем обычного доступа к членам объекта, поэтому .
для разрешения области действия используется обычный оператор метода. Другие языки, особенно C++ и Ruby , имеют как разрешение области действия, так и доступ к методу, которые взаимодействуют различными способами; см. примеры ниже.
class A { public : static int i ; // областью действия i является A }; пространство имен B { int c = 2 ; } // пространство имен B int A :: i = 4 ; // оператор области видимости ссылается на целое число i, объявленное в классе A int x = B :: c ; // оператор области видимости ссылается на целое число c, объявленное в пространстве имен B
В PHP оператор разрешения области также называется Paamayim Nekudotayim ( иврит : פעמיים נקודותיים , произносится [paʔaˈmajim nekudoˈtajim] , второе слово — это разговорное искажение נקודתיים, произносится [nekudaˈtajim] ), что на иврите означает «двойное двоеточие ».
Имя "Paamayim Nekudotayim" было введено в разработанном Израилем [1] Zend Engine 0.5, используемом в PHP 3. Первоначально сообщение об ошибке просто использовало внутреннее имя токена для ::
, T_PAAMAYIM_NEKUDOTAYIM
что вызывало путаницу у неговорящих на иврите. Это было разъяснено в PHP 5.4, как показано ниже.
$ php -r :: Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный '::' (T_PAAMAYIM_NEKUDOTAYIM)
Начиная с PHP 8, еврейское имя было удалено из сообщения об ошибке.
$ php -r ::Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный токен "::", ожидается конец файла в коде командной строки в строке 1
В Ruby разрешение области действия можно задать с помощью ключевого слова module.
Пример модуля Версия = 1 . 0 class << self # Мы обращаемся к синглтон-классу модуля def hello ( who = "world" ) "Hello #{ who } " end end end #/Пример Пример :: hello # => "Привет, мир" Пример . hello "хакер" # => "Привет, хакер" Пример :: Версия # => 1.0 Пример . Версия # NoMethodError # Это иллюстрирует разницу между оператором сообщения (.) и оператором области действия в Ruby (::) # Мы можем использовать как ::hello, так и .hello, поскольку hello является частью области действия Example, и поскольку Example # отвечает на сообщение hello. # # Мы не можем сделать то же самое с ::Version и .Version, поскольку Version находится в области действия Example, но # Example не может ответить на сообщение Version, поскольку нет метода для ответа.
На область действия также влияют сигилы , которые предшествуют именам переменных:
$
" - глобальная переменная@
" - переменная экземпляраself
@@
" - переменная класса