отладка — добавление необязательного отладочного / подробного вывода в PHP с минимальными затратами

В настоящее время я занимаюсь разработкой библиотеки на PHP. Эта библиотека использует свое собственное пространство имен. Для хранения глобальных (в рамках пространства имен библиотеки) настроек я использую статический класс, подобный этому:

class Settings {
public static $verbose = true;
}

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

class Log {
public static function v($msg) {
if ( ! Settings::$verbose) { return; }
echo $msg . "<br>\n";
}
}

Таким образом, я могу легко добавить подробный вывод в мой код:

Log::v('Answering questions...');
echo '42';

Однако этот подход создает множество ненужных вызовов методов, которые возвращаются сразу после деактивации подробного вывода.

Теперь я подумал об изменении моего подхода следующим образом:

class Log {

public static $v = false;

public static function init() {
self::$v = Settings::$verbose;
}

public static function v($msg) {
echo $msg . "<br>\n";
}

}

Я копирую значение Settings::$verbose в Log::$v только потому, что это короче. Сейчас — после звонка Log::init() один раз — моя подробная строка выглядит так:

Log::$v && Log::v('All questions answered.');

Но эта строка не такая аккуратная / короткая, как просто печатать Log::v(''), Мне не нравится мысль о необходимости печатать Log::$v && Log::v('') всякий раз, когда я хочу добавить информацию о том, что происходит.

Мой вопрос: есть ли другой способ добавить подробный вывод с минимальным размером? Есть ли в PHP встроенные функции, о которых я не знаю?

Чтобы избежать конфликтов с другими компонентами, я хочу держать вещи в пространстве имен библиотеки, поэтому я не хочу использовать глобальную константу, такую ​​как define('V', true),

Обновить: Я только что понял, что константы могут быть пространством имен, поэтому я мог изменить свой второй подход на:

define(__NAMESPACE__ . '\V', true);
V && Log::v('...');

Но мои вопросы остаются …

1

Решение

Задача ещё не решена.

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

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

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