Руководство php.net не имеет смысла для класса Оператор разрешения области действия ::

пытаясь выучить php и поймал другую загвоздку

Хорошо, это то, что они говорят на php.net ниже о ::

Оператор разрешения области (также называемый Paamayim Nekudotayim) или, проще говоря, двойное двоеточие, является токеном, который обеспечивает доступ к статическим, постоянным и переопределенным свойствам или методам класса.

Начиная с PHP 5.3.0, можно ссылаться на класс с помощью переменной. Значение переменной не может быть ключевым словом (например, self, parent и static).

При ссылке на эти элементы вне определения класса используйте имя класса.

class MyClass {
const CONST_VALUE = 'A constant value';
}

$classname = 'MyClass';

echo $classname::CONST_VALUE;

echo MyClass::CONST_VALUE;
?>

Теперь вернемся к приведенному выше коду

$classname = 'MyClass';

ЭТО ПЕРЕМЕННОЕ! ПОЛУЧИТЬ «СТРОЧНУЮ» ЗНАЧЕНИЕ «MyClass»!

echo $classname::CONST_VALUE;

ТАК КАК ЭТА ЛИНИЯ ДАЖЕ ВОЗМОЖНА! ЭТО НЕ НУЖНО С ЭТОМ КЛАССОМ!

ЭТО ОСОБЕННО ПРОСТАЯ ПЕРЕМЕННАЯ С ПЕРЕМЕННОЙ ЯРКОЙ!
ТАК КАК ЭТО ВОЛШЕБНО ПОЛУЧАЕТ СИЛУ, ЧТОБЫ ДОСТУПИТЬ, ЧТО КЛАСС ПОСТОЯННО С ::
ТОЛЬКО ТОЛЬКО ВИДЕМОСТЬ, КОТОРАЯ ВИДЕТСЯ, ЯВЛЯЕТСЯ СТРУТОЙ «MyClass» теоретически не может позволить этому случиться, это просто строка.

Может кто-то объяснить, потому что у меня 100 уловок в день, я начинаю думать, что php был просто придуман, потому что в нем слишком много противоречивых вещей.

0

Решение

В этом случае эти две линии в основном одинаковы.

echo $classname::CONST_VALUE;

echo MyClass::CONST_VALUE;

PHP пытается «привести» строку "MyClass" в класс. Если класс существует, все работает как шарм.

Другой пример может быть:

$instance = new $classname;

где $instance является действительным экземпляром MyClass,

Другими словами, вы можете заменить имя класса его строковым представлением.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]