Usando le costanti magiche da un altro ambito

Ho creato una class Debug in cui tutte le properties; e i methods sono statici. Usando il binding statico avanzato uso questa class come un logger di ciò che viene fatto e in quale momento (in effetti sto testando ora il problema delle performance, quindi mi piacerebbe ora cosa e quando va).

Quindi al momento ho qualcosa in each metodo principale di each class come Debug::log(__CLASS__ . '::' . __METHOD__); . Nel metodo Debug::log() posso aggiungere tempo e memorizzarlo in qualche arrays.

Se avessi voluto un giorno modificare il comportmento, avrei dovuto modificare molto codice in molti file …

La mia domanda è: è ansible in qualche modo omettere questi __CLASS__ . '::' . __METHOD__ __CLASS__ . '::' . __METHOD__ __CLASS__ . '::' . __METHOD__ e il metodo Debug::log() saprebbero da quale class e da quale metodo è stato chiamato?

Uno stack di chiamate forse?

    La function che stai cercando è debug_backtrace() ; ti fornirà una struttura dati che puoi utilizzare per questo scopo. Non c'è modo di far sì che le costanti magiche funzionino in questo modo, anche se sono d'accordo con l'idea e si potrebbe prendere in considerazione la pubblicazione di richieste di funzionalità per consentire che le costanti magiche utilizzate come valori predefiniti nelle definizioni di funzioni vengano valutate al momento della chiamata, non definire il tempo. Vorrei supportre tale richiesta di funzionalità.

    La logging che stai facendo sembra un tipo di logging di tipo Reflection, piuttosto che un tipo di logging basato sull'aspetto.

    È ansible arrivare molto lontano con l'iniezione di dipendenza. Aggiunta di logger per i diversi tipi di cose che si desidera registrare, es. intrusion-bad-password, mail-log ecc.

    A mio avviso, non ha molto senso un tipo di logging di Reflection, questo richiede di esporre troppo del vostro internals.

    Se si desidera una stacktrace quando si verificano errori, utilizzare Exception->getTrace .