Kann ich einen PHP "Makro" (wie #define) erstellen, um Parameter für Funktionsaufrufe zu liefern?

8

Die Parameter, über die ich spreche, sind __FILE__ und __LINE__ - diejenigen des Aufrufers der Funktion, so dass die Funktion sie in der Fehlerberichterstattung verwenden kann.

Nehmen wir an, ich habe zwei Dateien und Zeile 100 von file_1.php ruft my_func() in file_2.php

auf

Ich möchte diesen Aufruf my_func(__FILE__, __LINE__) ausführen, damit, wenn my_func einen Fehler feststellt, dieser in Zeile 100 gegen file_1.php gemeldet werden kann.

Das mache ich, weil es Hunderte von Aufrufen von my_func gibt und die Meldung, dass der Fehler in my_func () selbst enthalten ist, ist möglicherweise nicht informativ (es sei denn, ich lade den Stapel ab). Und ich möchte diese zwei Parameter nicht ein paar hundert Mal manuell eingeben müssen.

In C würde ich etwas wie #define MY_FUNC my_func(__FILE, __LINE) machen - kann ich etwas Ähnliches in PHP machen?

    
Mawg 12.10.2010, 02:37
quelle

4 Antworten

10

Leider hat PHP keine Makros. Sie könnten diese selbst implementieren, indem Sie ein Befehlszeilen-Tool wie sed über eine Eingabe ausführen, um Makros einzufügen, aber das ist fehleranfällig und ein wenig schlampig.

Um zu tun, was Sie tun möchten, können Sie die Funktion debug_backtrace in Betracht ziehen.

    
ryeguy 12.10.2010, 02:40
quelle
2

Nein. Verwenden Sie einen Stack-Trace: debug_backtrace () . Sie können die Datei und die Zeile des Aufrufers abrufen, indem Sie einfach auf die zweite Zeile im zurückgegebenen Array schauen.

    
Emil H 12.10.2010 02:40
quelle
2

Leider gibt es kein C wie Macros in PHP.

Das Lesen einer debug_backtrace ist knifflig und das gefällt mir nicht.

Was ich möchte eine Ausnahme an Fehlerpunkten werfen dann Ausnahme-Objekt es selbst enthält die Stack-Trace sowie die Zeilennummer und die Datei, aus der es kommt.

%Vor%     
Mojtaba 17.04.2012 19:41
quelle
2

Sie können C-ähnliche Makros mit Hilfe des Quellschreibens replizieren.

Schreibe Datei macro.php :

%Vor%

Jetzt mit diesem Tool ist die Verwendung einfach:

%Vor%

Bei ausgeführten Ausgaben:

  

0.5 DEBUG_INFO: FILE : /var/tmp/test.php.pr; LINE : 7

     

INF DEBUG_INFO: FILE : /var/tmp/test.php.pr; LINE : 8

     

NAN DEBUG_INFO: FILE : /var/tmp/test.php.pr; LINE : 9

Ich habe starken C-Hintergrund und verpasste immer C-ähnliche Makros in PHP. Aber hoffentlich können wir eine Art Ersatz dafür anbieten.

    
Agnius Vasiliauskas 01.11.2017 13:55
quelle

Tags und Links