Магические константы

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

Магические константы в PHP — это особый набор предопределенных констант, которые меняют свое значение в зависимости от того, где они используются. Звучит как магия, не так ли? На самом деле, это мощный инструмент для отладки и получения информации о контексте выполнения кода. Например, с их помощью можно легко узнать имя файла, номер строки, название функции или класса, в котором произошла ошибка.

В этом тренажере мы разберемся, какие бывают магические константы, за что каждая из них отвечает и как их правильно применять. Задания построены от простого знакомства с константами до решения более сложных задач, где их использование помогает понять структуру кода. Вы научитесь сопоставлять константы с их описанием, находить ошибки в их написании, предсказывать результат их вывода и даже собирать из них полезные отладочные сообщения.

Список тем

Сопоставьте магическую константу с её назначением

id: 38918_task_compare_1

Перед вами список магических констант и их описания. Ваша задача — правильно сопоставить каждую константу с тем, что она возвращает. Перетащите элементы из правой колонки так, чтобы они соответствовали описаниям слева.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Возвращает номер текущей строки в файле.
Полный путь и имя текущего файла.
Путь к директории, в которой находится текущий файл.
Имя функции, в которой она вызвана.
__FILE__
__DIR__
__FUNCTION__
__LINE__
Сообщения
Проверить
Показать подсказку

Вывод номера текущей строки

id: 38918_task_replace_2

Иногда при отладке бывает полезно знать, на какой именно строке выполняется код. Используйте подходящую магическую константу, чтобы вывести на экран номер строки, на которой происходит вызов `echo`.

Заполните пропуски
<?php

echo 'Этот код выполняется на строке номер: ' . input1S;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Исправьте ошибку в имени константы

id: 38918_task_error_3

В коде допущена ошибка в написании магической константы. Из-за этого скрипт не будет работать так, как ожидается. Найдите и исправьте ошибку, чтобы код корректно выводил полный путь к файлу.

Найдите ошибку и исправьте
<?php
// Выводим путь к текущему файлу
echo "Путь к файлу: " . __file__;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Что выведет этот код?

id: 38918_task_predict_result_4

Внимательно посмотрите на код. Константа `__LINE__` возвращает номер строки, на которой она была вызвана. Какой результат вы ожидаете увидеть на экране после выполнения этого скрипта?

Выберите правильный вариант ответа
<?php

// Это комментарий

echo __LINE__;

?>
Сообщения
Проверить
Показать подсказку

Предскажите вывод константы __DIR__

id: 38918_task_give_result_5

Представьте, что следующий PHP-скрипт сохранен в файле по пути `/var/www/my-project/includes/config.php`. Что именно выведет `echo __DIR__;` при запуске этого файла? Введите точный путь в поле ответа.

Что должно получиться?
<?php
// Файл находится в /var/www/my-project/includes/config.php

echo __DIR__;
Сообщения
Проверить
Показать подсказку

Соберите отладочное сообщение

id: 38918_task_bank_fill_6

Внутри функции `log_error` нужно сформировать строку с сообщением об ошибке. Используйте магические константы из банка, чтобы указать, в какой функции и на какой строке произошла ошибка. Перетащите нужные элементы из банка в пропуски.

Нужно правильно расставить в пропуски предложенные варианты
function log_error($message) {
    echo 'Ошибка в функции: ' . input1S . ', строка ' . input2S . ': ' . $message;
}

log_error('Не удалось подключиться к базе данных');
__FUNCTION__
__LINE__
__FILE__
$message
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Что вернет __CLASS__ вне класса?

id: 38918_task_predict_result_7

Магическая константа `__CLASS__` предназначена для получения имени класса. Что произойдет, если попытаться вывести ее значение не внутри класса, а в глобальной области видимости? Выберите правильный вариант ответа.

Выберите правильный вариант ответа
<?php

class Product {
    public $name = 'Apple';
}

echo 'Текущий класс: [' . __CLASS__ . ']';
Сообщения
Проверить
Показать подсказку

Распределите константы по категориям

id: 38918_task_sort_8

Магические константы можно условно разделить на группы по их назначению. Распределите предложенные константы по двум категориям: те, что относятся к файловой системе, и те, что описывают контекст выполнения кода (классы, функции, трейты).

Перетяните элементы в соответствующие блоки
Файловая система
Контекст кода
__DIR__
__METHOD__
__FILE__
__CLASS__
__TRAIT__
Сообщения
Проверить
Показать подсказку

Соберите скрипт для вывода имени метода

id: 38918_task_build_from_parts_9

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

Перетяните в правильном порядке строки из одного блока в другой
<?php
class Logger {
public function log() {
echo __METHOD__;
}
}
$logger = new Logger();
$logger->log();
echo __CLASS__;
new Logger;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Трейты и магические константы

id: 38918_task_predict_result_10

Это сложная задача. Трейт `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();
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру