nur-sery/src/output/msg.php

56 lines
1.8 KiB
PHP
Raw Normal View History

2023-12-27 11:38:43 +04:00
<?php
namespace nur\sery\output;
2024-04-05 08:31:49 +04:00
use nur\sery\ValueException;
2023-12-28 11:54:15 +04:00
use nur\sery\output\std\ProxyMessenger;
2023-12-27 11:38:43 +04:00
/**
* Class msg: inscrire un message dans les logs ET l'afficher sur la console
2024-04-05 19:36:32 +04:00
*
* Cette classe DOIT être initialisée avec {@link set_messenger()} ou
* {@link set_messenger_class()} avant d'être utilisée. Une fois initialisée,
* les classes {@link say} et {@link log} sont utilisables aussi
2023-12-27 11:38:43 +04:00
*/
class msg extends _messenger {
static function set_messenger(?IMessenger $say, ?IMessenger $log=null) {
if ($say !== null) self::$say = $say;
2023-12-28 15:59:45 +04:00
if ($log !== null) self::$log = $log;
if ($say !== null || $log !== null) {
// forcer la recréation de l'instance partagée $msg
self::$msg = null;
}
2023-12-28 15:59:45 +04:00
}
static function set_messenger_class(?string $say_class, ?string $log_class=null) {
if ($say_class !== null) {
if (!is_subclass_of($say_class, IMessenger::class)) {
throw ValueException::invalid_class($say_class, IMessenger::class);
}
self::$say = new $say_class();
2023-12-28 15:59:45 +04:00
}
if ($log_class !== null) {
if (!is_subclass_of($log_class, IMessenger::class)) {
throw ValueException::invalid_class($log_class, IMessenger::class);
}
self::$log = new $log_class();
}
if ($say_class !== null || $log_class !== null) {
// forcer la recréation de l'instance partagée $msg
self::$msg = null;
}
2023-12-28 15:59:45 +04:00
}
2023-12-28 11:54:15 +04:00
static function get(): IMessenger {
if (self::$msg === null) {
$log = self::$log;
$say = self::$say;
if ($log !== null && $say !== null) $msg = new ProxyMessenger($log, $say);
elseif ($log !== null) $msg = $log;
elseif ($say !== null) $msg = $say;
else $msg = new ProxyMessenger();
self::$msg = $msg;
}
return self::$msg;
2023-12-27 11:38:43 +04:00
}
}