Просмотров: 6 651

Зачем нужны конструкции -> (Тире и знак больше) и :: (двойное двоеточие) в PHP?

Если вы разбирали коды каких-либо программ, написанных на языке php, то, наверняка, вам приходилось встречать в коде вот такие спец. символы:

-> (Тире и знак больше)

:: (Двойное двоеточие)

phpkonstr

Например, конструкции с этими выражениями могут иметь вид:

Hello:: hello_world();
q -> hello_world();

Чтобы понять, для чего нужны эти конструкции, давайте рассмотрим самый простой пример. Предположим, у нас есть простая программа «Привет мир!».

Создадим простой php-файл и напишем в нем следующий код:

Class Hello {
function hello_world () {
echo "Привет мир";
}
}

Теперь подумайте, как можно выполнить функцию hello_world().

Если бы функция hello_world() находилась бы не в классе Hello, то мы бы вызвали ее очень просто:

hello_world ();

В результате, у нас бы на экране появилась надпись «Привет мир». Но, скорее всего, если вы попытались решить задачу таким образом, у вас на экране появилась ошибка:

Fatal error: Call to undefined function hello_world() in …/test.php on line…

Все правильно, т.к. функция находиться в классе, то нужно сообщить компьютеру, что ее нужно искать именно в классе Hello. Если этого не сделать, то ничего работать не будет.

Как же образом такую информацию можно сообщить компьютеру?

Здесь есть несколько вариантов. Давайте рассмотрим каждый в отдельности.

1 вариант. Через создание экземпляра класса.

$q = new Hello;

Этой строкой мы создаем так называемый экземпляр класса Hello. После этой операции, мы можем свободно обращаться к нужной нам функции через этот экземпляр, который в данном случае хранится в переменной $q.

$q -> hello_world();

Связующим звеном между экземпляром класса и функцией становится конструкция «->».

Теперь все работает. Ура! Вы должны увидеть на экране надпись «Привет мир».

2 вариант.  Использование конструкции двойное двоеточие ::

Этот вариант еще намного проще. Здесь даже не нужно создавать никаких экземпляров. Просто пишем.

Hello::hello_world();

Можете проверить, функция успешно будет выполнена.

Надеюсь, что после прочтения этой заметки, Вы теперь поняли, что «->» и «::» используются для доступа к нужной функции в созданном классе.

С помощью этих же конструкций мы можем обращаться и к переменным, которые находятся в классах. Единственное отличие в том, что в конце не нужно ставить скобочки. Например:

Hello::world;

Этой конструкцией мы обращаемся к переменной world, которая находиться в классе Hello.

Особенно часто подобные конструкции можно встретить при разборе кода различных систем управления сайтов. Посмотрите исходный код таких систем как Joomla, WordPress и.т.д. Теперь вы знаете для чего это все нужно.

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

Обучающий курс для начинающих по основам работы с веб-аналитикой сайтов на системе Яндекс Метрика здесь.

Страница с описанием моих услуг по веб-аналитике: здесь.

  • Александр

    Спасибо, за ценную информацию! Очень пригодилась!

  • Давид

    Наконец-то узнал истину!!!! Спасибо!!!!

  • Дима

    > можно обращаться к переменной world

    но в вашем классе-примере нет переменной world

  • Павел

    Дай Бог тебе здоровья, добрый человек!
    Всё просто и понятно.
    Вы не собираетесь рассказывать о ООП, простым, понятным языком, на самых простых примерах? Было бы замечательно.

  • unf13 unf13

    Получается, что разницы между этими конструкциями вообще нет, просто двойное двоеточие позволяет не создавать экземпляр класса? или он создается неявно?