php - konstanten redefinieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Pischti
Beiträge: 417
Registriert: 20.02.2002 12:54:18
Wohnort: dresden

php - konstanten redefinieren

Beitrag von Pischti » 08.11.2004 19:55:56

hi,
ich hab vor mir ein eigenes objectmodel mit php5 zu erstellen
dazu möchte ich jede methode mit einer log-funktion auszustatten, wie folgt

function log($user, $priority, $location, $msg)
{
#code, der loggt
}

der aufruf soll ungefähr so aussehen
log(1,1, __FILE__ . __CLASS__ . __FUNCTION__, 'meine message ');

jetzt ist mir jedesmal das schreiben von __FILE__ __CLASS__ __FUNCTION__ zu viel

ansatz:
define( '_LOG' , __FILE__ . __CLASS__ . __FUNCTION__);
#...
log(1,1, _LOG , 'meine message ');

das würde ja aber zwei preprozessordurchläufe notwendig machen - gehjt also nicht
hat jemand eine idee, wie ich meiner log-funktion so kurz wie gewollt schreiben kann, trotzdem aber die aktuelle zeile und methode mit reinbekomme ... ?
gruss pischti
debian stable

Benutzeravatar
ManInTheShak
Beiträge: 108
Registriert: 30.09.2003 19:50:54

Beitrag von ManInTheShak » 09.11.2004 09:12:26

Hallo,

sofern in PHP5 möglich könntest du die Funktion log() ja einfach Überladen
oder was aber auf jeden fall geht, ist eine eigene Funktion definieren die dann LOG aufruft.
Beispiel:

Code: Alles auswählen

function _log($user, $priority, $msg)
{
  log($user, $priority, __FILE__ . __CLASS__ . __FUNCTION__,$msg); 
}
Gruß ManInTheShak

Benutzeravatar
Pischti
Beiträge: 417
Registriert: 20.02.2002 12:54:18
Wohnort: dresden

Beitrag von Pischti » 09.11.2004 16:07:45

na, dein code ist ja witzig ... :)
eben das geht ja nicht !!!
in __FILE__ und __CLASS__ wurden dann die werte der _log()-funktion stehen, nicht aber von dort, wer die log-funktion aufgerufen hat ...
das is da das problem.

trotzdem danke
gruss pischti
debian stable

Benutzeravatar
ManInTheShak
Beiträge: 108
Registriert: 30.09.2003 19:50:54

Beitrag von ManInTheShak » 11.11.2004 22:43:50

Pischti hat geschrieben:na, dein code ist ja witzig ... :)
Stimmt :wink:

Was evtl. noch gehen könnte, ist eine Classe zu instanzieren und in den Constructor __construct __LINE__ etc zu verwenden (siehe 1 Exceptions Example), was dann aber nur mit PHP 5 gehen könnte.

Gruß ManInTheShak

[1] http://www.zend.com/php5/articles/engin ... #Heading12

toaster
Beiträge: 63
Registriert: 21.10.2004 21:54:03
Wohnort: Dresden

Beitrag von toaster » 13.11.2004 15:11:32

moin,

den caller bekommste über:

Code: Alles auswählen

$trace = debug_backtrace();
$caller= $trace[1]['class'].'::'..$trace[1]['function'];
die cls is natürlich nur da, wenns n object war ;)

gruss
ts

Antworten