Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543

    come posso implementare la gestione di warning personalizzati?

    Ciao ragazzi, ho un grosso dilemma...
    ho 3 classi (Warning, Notice, Error) con dei metodi addMessage e getMessages. Io vorrei fare in modo di avere una situazione del genere
    Codice PHP:
    function mioMetodo(){
      if(
    bla bla bla bla){
        
    esegui;
      }
      else{
        
    Warning::addMessage("l'esecuzione di questo metodo è stata ignorata");
      }
    }
    function 
    mioMetodo2(){
      if(
    bla bla bla bla){
        
    esegui;
      }
      else{
        
    Error::addMessage("l'esecuzione di questo metodo è stata ignorata e il programma verrà terminato");
      }

    Ora, vorrei avere una gestione dei messaggi, creata all'intero delle 3 classi (Warning, Notice, Error) del tipo
    Codice PHP:
    CLASSE WARNING
    addMEssage
    ($msg){
      print 
    "Il metodo $nomeMetodo della classe $nomeClasse richiamato da $classeCheRichiamaIlMetodo nel $nomeDelFile alla linea $lineaDelFile ha prodotto un warning: $msg";
    }
    CLASSE ERROR
    addMEssage
    ($msg){
      print 
    "Il metodo $nomeMetodo della classe $nomeClasse richiamato da $classeCheRichiamaIlMetodo nel $nomeDelFile alla linea $lineaDelFile ha prodotto un error: $msg";
      die();

    utilizzando debug_backtrace() ho tutte quelle informazioni che mi servono; il problema è che, non sapendo chi è il chiamante del metodo che va in errore non riesco a capire come possa risalire lo stack per utilizzare le informazioni in quanto potrei avere, ad esempio, due situazioni del tipo
    Codice PHP:
    index.php
    new classeA();

    classeA.php
    classeA
    {
    function 
    __construct(){
      new 
    classeB();
    }

    classeB.php
    classeB
    {
      function 
    __construct(){
        new 
    classeX()->mioMetodo();
      }
    }

    index.php
    new classeA();

    classeA.php
    classeA
    {
    function 
    __construct(){
        new 
    classeX()->mioMetodo();

    quindi lo stack, giustamente, è diverso e cambia il livello del chiamante...sto sbagliando tutta l'architettura, vero?
    Cosa mi consigliate come architettura per un sistema di gestione warning, errore, notice?
    O se la mia attuale non è così errata, come posso valorizzare le variabili che mi servirebbero?

    Grazie a tutti e scusate per la lunghezza

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  2. #2
    hai provato a dare uno sguardo alle Exceptions di php?? link
    Questa volta, più che un voto.. è favoreggiamento.

  3. #3
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    Originariamente inviato da Al_katraz984
    hai provato a dare uno sguardo alle Exceptions di php?? link
    quindi mi consigli di fare una cosa tipo
    Codice PHP:
    class Warning{
      private static 
    $warning = array();
      public static function 
    add($msg){
        
    self::$warning[] = new Exception($msg);
      }

    ma in questo caso l'eccezione sarebbe sollevata sempre nel file warning.php. Se Warning fosse un'estensione della classe Warning potrei fare una cosa del tipo
    Codice PHP:
    class MessageManager{
      private static 
    $exception = array();
      private static 
    $type = array();
      public static function 
    add(Exception $e){
        
    self::$exception[] = $e;
        
    self::$type[] = getTypeOfClass($e);
      }
    }

    e nei file dove devo sollevare

    MessageManager
    ::add(new Warning('nuovo warning'); 
    o anche in questo caso sto cannando a pieno?

    In questo caso l'eccezione sollevata non blocca l'esecuzione dello script, vero? Quindi per quella di tipo error ci devo cmq aggiungere un die().

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.