Магические константы в PHP — это особый набор предопределенных констант, которые меняют свое значение в зависимости от того, где они используются. Звучит как магия, не так ли? На самом деле, это мощный инструмент для отладки и получения информации о контексте выполнения кода. Например, с их помощью можно легко узнать имя файла, номер строки, название функции или класса, в котором произошла ошибка.
В этом тренажере мы разберемся, какие бывают магические константы, за что каждая из них отвечает и как их правильно применять. Задания построены от простого знакомства с константами до решения более сложных задач, где их использование помогает понять структуру кода. Вы научитесь сопоставлять константы с их описанием, находить ошибки в их написании, предсказывать результат их вывода и даже собирать из них полезные отладочные сообщения.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 20: Работа с базами данных MySQLi
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 26: Генераторы и итераторы
- Модуль 27: Reflection API
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
Сопоставьте магическую константу с её назначением
Перед вами список магических констант и их описания. Ваша задача — правильно сопоставить каждую константу с тем, что она возвращает. Перетащите элементы из правой колонки так, чтобы они соответствовали описаниям слева.
__FILE____DIR____FUNCTION____LINE__Вывод номера текущей строки
Иногда при отладке бывает полезно знать, на какой именно строке выполняется код. Используйте подходящую магическую константу, чтобы вывести на экран номер строки, на которой происходит вызов `echo`.
<?php
echo 'Этот код выполняется на строке номер: ' . input1S;Исправьте ошибку в имени константы
В коде допущена ошибка в написании магической константы. Из-за этого скрипт не будет работать так, как ожидается. Найдите и исправьте ошибку, чтобы код корректно выводил полный путь к файлу.
<?php// Выводим путь к текущему файлуecho "Путь к файлу: " . __file__;Что выведет этот код?
Внимательно посмотрите на код. Константа `__LINE__` возвращает номер строки, на которой она была вызвана. Какой результат вы ожидаете увидеть на экране после выполнения этого скрипта?
<?php
// Это комментарий
echo __LINE__;
?>Предскажите вывод константы __DIR__
Представьте, что следующий PHP-скрипт сохранен в файле по пути `/var/www/my-project/includes/config.php`. Что именно выведет `echo __DIR__;` при запуске этого файла? Введите точный путь в поле ответа.
<?php
// Файл находится в /var/www/my-project/includes/config.php
echo __DIR__;Соберите отладочное сообщение
Внутри функции `log_error` нужно сформировать строку с сообщением об ошибке. Используйте магические константы из банка, чтобы указать, в какой функции и на какой строке произошла ошибка. Перетащите нужные элементы из банка в пропуски.
function log_error($message) {
echo 'Ошибка в функции: ' . input1S . ', строка ' . input2S . ': ' . $message;
}
log_error('Не удалось подключиться к базе данных');Что вернет __CLASS__ вне класса?
Магическая константа `__CLASS__` предназначена для получения имени класса. Что произойдет, если попытаться вывести ее значение не внутри класса, а в глобальной области видимости? Выберите правильный вариант ответа.
<?php
class Product {
public $name = 'Apple';
}
echo 'Текущий класс: [' . __CLASS__ . ']';Распределите константы по категориям
Магические константы можно условно разделить на группы по их назначению. Распределите предложенные константы по двум категориям: те, что относятся к файловой системе, и те, что описывают контекст выполнения кода (классы, функции, трейты).
Соберите скрипт для вывода имени метода
Соберите из предложенных фрагментов кода работающий PHP-скрипт. Скрипт должен определять класс, создавать его экземпляр и вызывать метод, который выводит на экран свое собственное имя с помощью магической константы. Лишние строки использовать не нужно.
<?phpclass Logger {public function log() {echo __METHOD__;}}$logger = new Logger();$logger->log();echo __CLASS__;new Logger;Трейты и магические константы
Это сложная задача. Трейт `InfoProvider` используется в классе `Book`. Метод `getInfo` определен в трейте, но вызывается у объекта класса. Что выведут константы `__CLASS__` и `__TRAIT__` в этом контексте?
<?php
trait InfoProvider {
public function getInfo() {
echo 'Trait: ' . __TRAIT__ . ', Class: ' . __CLASS__;
}
}
class Book {
use InfoProvider;
}
$book = new Book();
$book->getInfo();