nur-sery/nur_src/debug.php

95 lines
2.6 KiB
PHP

<?php
namespace nur;
/**
* Class debug: outils pour afficher des valeurs dans les logs à des fins de
* débuggage
*/
class debug {
/** afficher telles quelles les valeurs des variables dans le flux HTML */
static final function outv(...$values): void {
echo "<!--\n";
foreach ($values as $value) {
var_export($value);
}
echo "\n-->\n";
}
/** afficher telles quelles les valeurs des variables dans les logs d'erreurs */
static final function logv(...$values): void {
foreach ($values as $value) {
error_log(var_export($value, true));
}
}
/**
* Formatter une liste de valeurs, et retourner une liste de lignes.
*
* Une valeur qui commence par "\n" provoque un retour à la ligne. Sinon, les
* valeurs sont retournées telles quelles.
*/
static final function format_values(...$values): array {
$lines = [];
$parts = [];
foreach ($values as $value) {
if (is_string($value)) {
if (substr($value, 0, 1) == "\n") {
if ($parts) $lines[] = implode(" ", $parts);
$parts = [];
$value = substr($value, 1);
if (!$value) continue;
}
$parts[] = $value;
} else {
$parts[] = var_export($value, true);
}
}
if ($parts) $lines[] = implode(" ", $parts);
return $lines;
}
/**
* afficher un message composé de la valeur de plusieurs variables dans le
* flux HTML.
*/
static final function out(...$values): void {
$lines = self::format_values(...$values);
if ($lines) {
echo "<!--\n";
echo implode("\n", $lines);
echo "\n-->\n";
}
}
/**
* S'assurer que chaque ligne ne contient pas "\n", ce qui permet de les
* afficher correctement dans les logs
*/
static final function split_lines($lines): array {
$parts = [];
foreach ($lines as $line) {
$parts[] = explode("\n", $line);
}
return array_merge(...$parts);
}
/**
* afficher un message composé de la valeur de plusieurs variables dans les
* logs d'erreur. Une chaine "\n" permet de séparer les groupes de valeurs
*/
static final function log(...$values): void {
$lines = self::format_values(...$values);
$lines = self::split_lines($lines);
#if ($lines) error_log(implode("\n", $lines));
# afficher chaque ligne à part; c'est plus lisible...
foreach ($lines as $line) {
error_log($line);
}
}
/** afficher un message dans les logs d'erreurs uniquement si on est en mode DEBUG */
static final function logm(...$values): void {
if (config::is_debug()) self::log(...$values);
}
}