что означает двойное двоеточие в php
Что означает двойное двоеточие в php
Используя эту оператор :: можно обращаться к константам, статическим или перегруженным свойствам или методам класса.
При обращении к этим элементам извне класса, программист должен использовать имя этого класса.
Обозначение «двойное двоеточие» (::) не менялось ни разу в течение всего времени разработки PHP.
Использование :: вне объявления класса
class MyClass <
const CONST_VALUE = ‘Значение константы’ ;
>
echo MyClass :: CONST_VALUE ;
?>
Использование :: в объявлении класса
Когда дочерний класс перегружает методы, объявленные в классе-родителе, PHP не будет осуществлять автоматический вызов методов, принадлежащих классу-родителю. Этот функционал возлагается на метод, перегружаемый в дочернем классе. Данное правило распространяется на конструкторы и деструкторы, перегруженные и другие методы.
Обращение к методу в родительском классе
protected function myFunc () <
echo «MyClass::myFunc()\n» ;
>
>
class OtherClass extends MyClass <
/* Override parent’s definition */
public function myFunc () <
/* But still call the parent function */
parent :: myFunc ();
echo «OtherClass::myFunc()\n» ;
>
>
Все специфические возможности, которыми обладает оператор :: в PHP5, не являются доступными в более ранних версиях PHP.
Какая разница между:: (двойной двоеточие) и → (стрелкой) в PHP?
Есть два разных способа доступа к методам в PHP, но какая разница?
ОТВЕТЫ
Ответ 1
Правило состоит в том, что вызов с :: является вызовом экземпляра тогда и только тогда, когда:
Ответ 2
:: используется в статическом контексте, т.е. когда какой-либо метод или свойство объявляется как статический:
Кроме того, оператор :: (Оператор разрешения области действия, aka Paamayim Nekudotayim) используется в динамическом контексте при вызове метода/свойство родительского класса:
-> используется в динамическом контексте, т.е. когда вы имеете дело с некоторым экземпляром некоторого класса:
Ответ 3
Фактически этим символом мы можем вызвать метод класса, который является статическим и не зависит от другой инициализации.
Здесь функция doWrite() не зависит от какого-либо другого метода или переменной, и это статический метод. Вот почему мы можем вызвать этот метод этим оператором без инициализации объекта этого класса.
Test::doWrite(‘Mrinmoy’); // Output: Hello Mrinmoy.
Но если вы хотите вызвать метод write таким образом, он будет генерировать ошибку, потому что она зависит от инициализации.
Ответ 4
Оператор => используется для назначения пар ключ-значение в ассоциативном массиве. Например:
Это значение похоже в выражении foreach :
Ответ 5
Разница между статическими и инстанцированными методами и свойствами, по-видимому, является одним из самых больших препятствий для тех, кто только начинается с OOP PHP в PHP 5.
Оператор стрелки, наоборот, вызывает методы или свойства, которые ссылаются на экземпляр объекта.
Статические методы могут быть особенно полезны в объектных моделях, которые связаны с базой данных для методов создания и удаления, поскольку вы можете установить возвращаемое значение в вставленный идентификатор таблицы, а затем использовать конструктор для создания объекта с помощью идентификатора строки.
Ответ 6
Если кто-то может расшифровать, почему это так, сделайте.
Ответ 7
Оператор разрешения области (также называемый Paamayim Nekudotayim) или, проще говоря, двойное двоеточие, является токеном, который обеспечивает доступ к статическим, постоянным и переопределенным свойствам или методам класса. При ссылке на эти элементы вне определения класса используйте имя класса.
Ответ 8
Константа класса, свойство класса (статическое) и функция класса (статическое) могут иметь одно и то же имя и быть доступными через двойное двоеточие.
Что означает добавленное двойное двоеточие»::»?
Я нашел эту строку кода в класс, который я должен изменить:
8 ответов
это гарантирует, что разрешение происходит из глобального пространства имен, а не начинается с пространства имен, в котором вы находитесь. Например, если у вас было два разных класса под названием Configuration такие как:
на :: оператор называется оператором разрешения области и делает именно это, он разрешает область. Таким образом, префикс type-name с этим указывает компилятору искать тип в глобальном пространстве имен.
много разумных ответов уже. Я приведу аналогию, которая может помочь некоторым читателям. :: работает очень похоже на разделитель каталогов файловой системы’ / ‘, при поиске вашего пути для программы, которую вы хотели бы запустить. Подумайте:
. одинаково ясно в пространстве имен C++ «дерево».
:: является оператором разрешения области. Он используется для определения области действия чего-либо.
например, :: только глобальная область, вне всех других пространств имен.
some::thing можно интерпретировать любым из следующих способов:
Итак, вернемся к вашему примеру, ::thing может быть только что-то в глобальной области видимости: тип, функция, объект или пространство имен.
способ его использования предполагает (используется в объявлении указателя), что это тип в глобальной области.
Я надеюсь, что этот ответ является полным и достаточно правильным, чтобы помочь вам понять разрешение области.
:: используется для связи чего-либо (переменной, функции, класса, typedef и т. д. ) в пространство имен или в класс.
его называют оператором разрешения области, скрытое глобальное имя можно ссылаться с помощью оператора разрешения области::
Например:
значение «взять имя из глобального пространства имен, а не что-либо еще». Но почему это должно быть написано явно?
использовать case-пространство имен clash
прецедент-подчеркните функцию, не являющуюся членом
когда вы пишете функцию-член (метод), вызовы другой функции-члена и вызовы нечленов (свободных) функций выглядят одинаково:
поэтому, чтобы сделать это более четко, можно либо написать this->Twist показать читателю, что Twist является функцией-членом или write ::Bend чтобы показать, что Bend бесплатно. Или обоих. Это очень полезно, когда вы выполнение или планирование рефакторинга.
например, если вы хотите использовать cout без упоминания using namespace std; в своем коде вы пишете следующее:
когда пространство имен не упоминается, то говорится, что класс принадлежит глобальному пространству имен.
Что означают два двоеточия в PHP?
30 ben [2010-05-25 12:50:00]
Я не знаю, что он делает, когда у нас есть такая ситуация:
Он выглядит как путь.
5 ответов
39 Решение Chris [2010-05-25 12:52:00]
Это (как правило) для доступа к статическому методу или свойству в классе. Он назывался оператором разрешения области или Paamayim Nekudotayim (что приводит к некоторым удивительно запутывающим сообщениям об ошибках!). См. http://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php.
51 Gumbo [2010-05-25 12:52:00]
Оператором :: является оператор разрешения области. Он используется для доступа к константам классов или статическим свойствам и методам либо вне класса:
Или внутри метода класса ссылаться на тот же или родительский класс, используя self и parent :
В дополнение к ответам относительно использования PHP двух двоеточий в качестве «оператора разрешения области видимости»:
Кроме того, используется двойное двоеточие:
Чтобы преобразовать неквалифицированное, квалифицированное или псевдонимное имя класса в его полностью квалифицированную форму, и
Для вызова метода класса __callStatic.
Чтобы преобразовать имя класса в его полностью определенную форму, добавив «:: class»
Две двоеточия, за которыми следует ключевое слово «class», расположенное после имени класса, обеспечивают полное имя этого класса в виде строки. Т.е., «ClassName :: class» преобразуется в полное имя «ClassName». См. (A) Руководство: классы и объекты: основы, (B) Руководство: классы и объекты: константы классов и (C) Руководство: справочник по языку: константы
Синтаксис был принят в PHP 5.5. Смотрите: (A) RFC и (B) PHP 5.5 Новые функции
Синтаксис «:: class» полезен в пространстве имен для получения полностью определенного имени класса из его неквалифицированной или квалифицированной формы или из псевдонима его имени.
Синтаксис «:: class», по-видимому, работает для разрешения имен интерфейсов, а также имен классов, хотя это, похоже, не документировано источниками, указанными выше.
Внутри класса синтаксис также работает с «self :: class», как упомянуто в RFC «:: class», указанном выше.
Для вызова «__callStatic»
Две двоеточия могут использоваться для «вызова» статического имени метода, которое класс не объявил. Это вызывает метод класса «__callStatic», если он его объявил. Затем метод __callStatic может «динамически» выбирать, как обрабатывать вызов. В PHP это называется «перегрузкой» с помощью «магического метода» __callStatic.
использование оператора разрешения области
Константа класса, свойство класса (статическое), функция класса (статическая) могут иметь одно и то же имя и быть доступными через двойное двоеточие.
Если вы разбирали коды каких-либо программ, написанных на языке php, то, наверняка, вам приходилось встречать в коде вот такие спец. символы:
-> (Тире и знак больше)
Например, конструкции с этими выражениями могут иметь вид:
Чтобы понять, для чего нужны эти конструкции, давайте рассмотрим самый простой пример. Предположим, у нас есть простая программа «Привет мир!».
Создадим простой php-файл и напишем в нем следующий код:
Теперь подумайте, как можно выполнить функцию hello_world().
Если бы функция hello_world() находилась бы не в классе Hello, то мы бы вызвали ее очень просто:
В результате, у нас бы на экране появилась надпись «Привет мир». Но, скорее всего, если вы попытались решить задачу таким образом, у вас на экране появилась ошибка:
Fatal error: Call to undefined function hello_world() in …/test.php on line…
Все правильно, т.к. функция находиться в классе, то нужно сообщить компьютеру, что ее нужно искать именно в классе Hello. Если этого не сделать, то ничего работать не будет.
Как же образом такую информацию можно сообщить компьютеру?
Здесь есть несколько вариантов. Давайте рассмотрим каждый в отдельности.
1 вариант. Через создание экземпляра класса.
Связующим звеном между экземпляром класса и функцией становится конструкция «->».
Теперь все работает. Ура! Вы должны увидеть на экране надпись «Привет мир».
2 вариант. Использование конструкции двойное двоеточие::
Этот вариант еще намного проще. Здесь даже не нужно создавать никаких экземпляров. Просто пишем.
Можете проверить, функция успешно будет выполнена.
Надеюсь, что после прочтения этой заметки, Вы теперь поняли, что «->» и «::» используются для доступа к нужной функции в созданном классе.
С помощью этих же конструкций мы можем обращаться и к переменным, которые находятся в классах. Единственное отличие в том, что в конце не нужно ставить скобочки. Например:
Этой конструкцией мы обращаемся к переменной world, которая находиться в классе Hello.
Особенно часто подобные конструкции можно встретить при разборе кода различных систем управления сайтов. Посмотрите исходный код таких систем как Joomla, WordPress и.т.д. Теперь вы знаете для чего это все нужно.
В дополнение к ответам относительно использования PHP двух двоеточий в качестве «оператора разрешения области видимости» :
Кроме того, используется двойное двоеточие:
Чтобы преобразовать неквалифицированное, квалифицированное или псевдонимное имя класса в его полностью квалифицированную форму, и
Для вызова метода класса __callStatic.
Чтобы преобразовать имя класса в его полностью определенную форму, добавив «:: class»
Синтаксис «:: class» полезен в пространстве имен для получения полностью определенного имени класса из его неквалифицированной или квалифицированной формы или из псевдонима его имени.
Синтаксис «:: class», по-видимому, работает для разрешения имен интерфейсов, а также имен классов, хотя это, похоже, не документировано источниками, указанными выше.
Внутри класса синтаксис также работает с «self:: class», как упомянуто в RFC «:: class», указанном выше.
fullName(), PHP_EOL; // outputs: MyNamespace\TheirClass
Для вызова «__callStatic»
Кроме того, используется двойное двоеточие:
Чтобы преобразовать неквалифицированное, квалифицированное или псевдонимное имя класса в его полностью квалифицированную форму, и
Для вызова метода класса __callStatic с произвольным, ранее необъявленным именем метода.
Чтобы преобразовать имя класса в его полностью определенную форму, добавив «:: class»
Синтаксис был принят в PHP 5.5. См. : (A) RFC и (B) Новые функции PHP 5.5
Синтаксис «:: class» полезен в пространстве имен для получения полностью определенного имени класса из его неквалифицированная или квалифицированная форма или из псевдоним его имени.
Синтаксис «:: class», по-видимому, работает для разрешения имен интерфейсов, а также имен классов, хотя, похоже, это не документировано источниками, указанными выше.
Внутри класса синтаксис также работает с «self:: class», как упомянуто в RFC «:: class», связанном выше.
fullName(), PHP_EOL; // outputs: MyNamespace\TheirClass