пытаясь выучить 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 был просто придуман, потому что в нем слишком много противоречивых вещей.
В этом случае эти две линии в основном одинаковы.
echo $classname::CONST_VALUE;
echo MyClass::CONST_VALUE;
PHP пытается «привести» строку "MyClass"
в класс. Если класс существует, все работает как шарм.
Другой пример может быть:
$instance = new $classname;
где $instance
является действительным экземпляром MyClass
,
Другими словами, вы можете заменить имя класса его строковым представлением.
Других решений пока нет …