Домой / Обзоры / Двоеточие в php. Что означают два двоеточия в PHP? вариант. Через создание экземпляра класса

Двоеточие в php. Что означают два двоеточия в PHP? вариант. Через создание экземпляра класса

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

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

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

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

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 и.т.д. Теперь вы знаете для чего это все нужно.

Больше моих уроков по PHP для начинающих .

В дополнение к ответам относительно использования PHP двух двоеточий в качестве "оператора разрешения области видимости" :

Кроме того, используется двойное двоеточие:

    Чтобы преобразовать неквалифицированное, квалифицированное или псевдонимное имя класса в его полностью квалифицированную форму, и

    Для вызова метода класса __callStatic.

Чтобы преобразовать имя класса в его полностью определенную форму, добавив ":: class"

Две двоеточия, за которыми следует ключевое слово "class", расположенное после имени класса, обеспечивают полное имя этого класса в виде строки. Т.е., "ClassName:: class" преобразуется в полное имя "ClassName". См. (A) Руководство: классы и объекты: основы , (B) Руководство: классы и объекты: константы классов и (C) Руководство: справочник по языку: константы

Синтаксис ":: class" полезен в пространстве имен для получения полностью определенного имени класса из его неквалифицированной или квалифицированной формы или из псевдонима его имени.

Синтаксис ":: class", по-видимому, работает для разрешения имен интерфейсов, а также имен классов, хотя это, похоже, не документировано источниками, указанными выше.

Внутри класса синтаксис также работает с "self:: class", как упомянуто в RFC ":: class", указанном выше.

Несколько примеров:

fullName(), PHP_EOL; // outputs: MyNamespace\TheirClass

Для вызова "__callStatic"

Две двоеточия могут использоваться для "вызова" статического имени метода, которое класс не объявил. Это вызывает метод класса "__callStatic", если он его объявил. Затем метод __callStatic может "динамически" выбирать, как обрабатывать вызов. В PHP это называется "перегрузкой" с помощью "магического метода" __callStatic .

handleOrder($arguments); } return "I"m sorry, we can"t help you with " . lcfirst($item) . "."; } } namespace OurCompany\Specialists; class Car { public function handleOrder($arguments) { return "May I help you with a $arguments car?"; } } class Truck { public function handleOrder($arguments) { return "May I help you with a $arguments truck?"; } } use OurCompany\Orders\Intake; echo Intake::orderCar("red"), PHP_EOL; // outputs: May I help you with a red car? echo Intake::orderTruck("pickup"), PHP_EOL; // outputs: May I help you with a pickup truck? echo Intake::orderShoes("suede"), PHP_EOL; // outputs: I"m sorry, we can"t help you with shoes.

Кроме того, используется двойное двоеточие:

    Чтобы преобразовать неквалифицированное, квалифицированное или псевдонимное имя класса в его полностью квалифицированную форму, и

    Для вызова метода класса __callStatic с произвольным, ранее необъявленным именем метода.

Чтобы преобразовать имя класса в его полностью определенную форму, добавив ":: class"

Две двоеточия, за которыми следует ключевое слово "class", расположенное после имени класса, предоставляют полное имя этого класса в виде строки. I.e. , "ClassName:: class" преобразуется в полное имя "ClassName". См. : (A) Руководство: классы и Объекты: основы , (B) Руководство: классы и объекты: класс Константы и (C) Руководство: справочник по языку: константы р>

Синтаксис был принят в PHP 5.5. См. : (A) RFC и (B) Новые функции PHP 5.5

Синтаксис ":: class" полезен в пространстве имен для получения полностью определенного имени класса из его неквалифицированная или квалифицированная форма или из псевдоним его имени.

Синтаксис ":: class", по-видимому, работает для разрешения имен интерфейсов, а также имен классов, хотя, похоже, это не документировано источниками, указанными выше.

Внутри класса синтаксис также работает с "self:: class", как упомянуто в RFC ":: class", связанном выше.

Несколько примеров:

fullName(), PHP_EOL; // outputs: MyNamespace\TheirClass

Чтобы вызвать «__callStatic» с необъявленным именем метода

Две двоеточия могут использоваться для "вызова" статического имени метода, которое класс не объявил. Например, "ClassName:: произвольныйMethodName ()". Это вызывает метод класса __callStatic, если класс объявил его. Он также передает __callStatic имя необъявленного метода и все аргументы, переданные необъявленному методу. Затем метод __callStatic может «динамически» выбирать, как обрабатывать вызов. В PHP это называется «перегрузкой» с помощью __ callStatic "магический метод" .

Пример: р>

handleOrder($arguments); } return "I"m sorry, we can"t help you with " . lcfirst($item) . "."; } } namespace OurCompany\Specialists; class Car { public function handleOrder($arguments) { return "May I help you with a $arguments car?"; } } class Truck { public function handleOrder($arguments) { return "May I help you with a $arguments truck?"; } } use OurCompany\Orders\Intake; echo Intake::orderCar("red"), PHP_EOL; // outputs: May I help you with a red car? echo Intake::orderTruck("pickup"), PHP_EOL; // outputs: May I help you with a pickup truck? echo Intake::orderShoes("suede"), PHP_EOL; // outputs: I"m sorry, we can"t help you with shoes.