Portal > Foren > PHP > PHP-Programmierung > Namen einer Variablen herausfinden
Antwort
 
Themen-Optionen
Alt 17.10.2005, 19:15 Nach oben    #1
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard Namen einer Variablen herausfinden

Hi Leute,
kleines Problemchen

Aaaaaalso. Ich möchte einer Methode ein paar Informationen übergeben. Als kleines Beispiel mal hier dieser Code.

PHP-Code:
<?php

    
function foo($var) {
         
printf('Variable %s has type %s.', ???, gettype($var));
    }


    
$peter 1;

    
foo($peter);

?>
Ich möchte jetzt anstelle der Fragezeichen irgendwas da reinschreiben, damti ich an die Information komme, dass die Variable $peter heißt.

Es ist nichts Notwendiges, wäre aber ein - meiner Ansicht nach - nettes Feature.
Irgendwie haben mich variable Variablen nicht wirklich weitergebracht (heißt aber nichts *g*). Ich könnte alle gesetzten Variablen mit get_defined_vars() auslesen, dann die Array-Schlüssel extrahieren ... und .. äh, dann wüsste ich immer noch nicht nach welchem Schlüssel ich suchen müsste.

Wenn es denn überhaupt möglich ist, danke ich für die Antwort.

Grüße Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.10.2005, 19:35 Nach oben    #2
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Mit get_defined_vars() könnte man es machen.
PHP-Code:
global ${$vars['var']};
if ( 
$peter === ${$vars['var']} )
{
    
//

Bei mehreren Wertequivalenzen wird dann allerdings der erste passende genommen. Also erstmal nur ein Denkansatz :>
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.10.2005, 20:02 Nach oben    #3
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
Standard

hab eben nochmal gesucht, es gab mal nen thread dazu auf php.de und soweit ich weis haben sich da viele bemüht, aber im endeffekt musste festgestellt werden, dass es keine Lösung dafür gibt. get_defined_vars() wirst du nie ne sichere übereinstimmung finden, sobald du 2 variablen mit selbem inhalt hast, bzw kann unter umständen ja schon reichen ne refrenz auf auf eine andere zu haben.



mfg
robo47
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.10.2005, 21:14 Nach oben    #4
Waq
Erfahrener Benutzer
 
Registriert seit: 18.08.2005
Beiträge: 108
Standard

So lange es nicht für den Produktivbetrieb gebraucht wird, könnte man vielleicht mit debug_backtrace() rummurksen, wobei ich jetzt nicht wirklich weiss, obs da auch drinsteht.
Waq ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.10.2005, 21:29 Nach oben    #5
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Wie gesagt, wäre nur ein Feature gewesen.

Es geht dabei um eine Exception, welche geworfen wird, wenn ein nicht korrekter Datentyp im Spiel ist. Ich möchte dann in der Ausgabe der Exception angeben, welcher Datentyp gefordert ist, welcher Datentyp vorhanden ist und wie die Variable heißt, damit man schnell suchen kann .
Die ersten beiden Sachen sind easy, die dritte nicht so wirklich wichtig, weil ich sowieso auch die Methoden getFile() und getLine() der Klasse Exception nutze.

Ich kann es also verschmerzen, wenn man das nicht hinbekommt

Grüße Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.10.2005, 21:54 Nach oben    #6
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Zitat:
Zitat von Waq
mit debug_backtrace() rummurksen, wobei ich jetzt nicht wirklich weiss, obs da auch drinsteht.
Nope. Es stehen Skriptname, Zeile und ggf. Klasse, OOP-Operator, Funktion und Argumente drin.
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.10.2005, 22:12 Nach oben    #7
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

Ein Denkansatz wäre vielleicht die Funktion mit $file und $line auszustatten:

PHP-Code:
function foo ($file$line$var)
{
  
/* code */

und die Funktion mittels:

PHP-Code:
foo (__FILE____LINE__$bar); 
aufzurufen. Nun könnte man innerhalb der Funktion das Script (enthalten in $file) öffnen, in Zeile x (enthalten in $line) springen und den Variablennamen mittels regex extrahieren.

Schon hat man seinen Variablennamen.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.10.2005, 22:15 Nach oben    #8
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

PHP-Code:
if ( )
{
    
/**
     * ein mehrzeiliger kommentar
     */
    
foo(__FILE____LINE__$bar);

__FILE__ und __LINE__ sind auch in debug_backtrace() enthalten

Aber das eigentliche Problem: Man kann den Variablennamen doch nicht eindeutig identifizieren. Mal sind mehrere Variablen in einer Zeile, mal ist ein Riesenkommentar dazwischen.


// Edit:
Hab's gerafft, sorry :>

// Edit²:
Nach einer doch deutlich Überlänge-Aufpreis verdächtigen Anlaufzeit hab ichs jetzt wirklich gerafft.
Klingt ziemlich gut.
__________________
Gedanken aus Draht stricken einen Zaun.

Geändert von Lars (17.10.2005 um 22:17 Uhr).
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.10.2005, 22:18 Nach oben    #9
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

Ich sagte extra mit RegEx, damit kannst du das wunderschön extrahieren.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.10.2005, 22:22 Nach oben    #10
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Nicht hauen, ich habs doch gerafft
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.10.2005, 22:54 Nach oben    #11
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Ich würde aber niemals die existenten Methoden getFile() und getLine() durch __LINE__ und __FILE__ ersetzen .. wozu auch.
Das ist dann doch alles viel zu umständlich.

Dann wäre es doch definitiv einfacher und weniger Schreibaufwand die Exception so zu werfen.

PHP-Code:
$var 1;

if(!
is_string($var)) {
    throw new 
WrongTypeException('string''$var'gettype($var));

oder halt so ähnlich ..
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.10.2005, 23:11 Nach oben    #12
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

Also mit meiner Methode? Denn mit debug_backtrace () erhälst du meines Wissens nach Zeile und Datei des Funktionsaufrufs von debug_backtrace, aber nicht von der Funktion!? oder irre ich mich da?
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.10.2005, 23:50 Nach oben    #14
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

nein, das war an Lars gedacht, hatte übersehen, dass es bereits 2 Seiten gibt, sorry.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.10.2005, 13:51 Nach oben    #15
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

debug_backtrace gibt auf jeden Fall Skript (mit absolutem Pfad) und Zeile zurück. Optional sind aufgerufene Funktion, Name der Klasse, der benutzte Klassenoperator :- oder ->) und die an die Funktion übergebenen Argumente. RTFM

Zitat:
hatte übersehen, dass es bereits 2 Seiten gibt
Einfach in die Baum-Ansicht wechseln, ist ziemlich praktisch. Links oben auf Ansicht -> Baum-Ansicht
__________________
Gedanken aus Draht stricken einen Zaun.

Geändert von Lars (18.10.2005 um 16:46 Uhr).
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.10.2005, 16:33 Nach oben    #16
Benutzer
 
Benutzerbild von Guradia
 
Registriert seit: 18.08.2005
Ort: Düsseldorf
Beiträge: 57
Standard

Zitat:
Zitat von Ben
Hi Leute,
Wenn es denn überhaupt möglich ist, danke ich für die Antwort.
Nein, gern.
Guradia ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.10.2005, 16:35 Nach oben    #17
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Hab ich mittlerweile dann auch schon verstanden
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.10.2005, 16:45 Nach oben    #18
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Zitat:
Zitat von Guradia
Zitat:
Zitat von Ben
Hi Leute,
Wenn es denn überhaupt möglich ist, danke ich für die Antwort.
Nein, gern.
Ich liebe diese Antworten. Erinnert mich immer ein bisschen an meinen Onkel, der ist auch immer so wortkarg


// Edit:
Werd versuchen, öfter dran zu denken, sorry.
__________________
Gedanken aus Draht stricken einen Zaun.

Geändert von Lars (18.10.2005 um 16:56 Uhr).
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.10.2005, 22:33 Nach oben    #20
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

Zitat:
Zitat von Lars
debug_backtrace gibt auf jeden Fall Skript (mit absolutem Pfad) und Zeile zurück. Optional sind aufgerufene Funktion, Name der Klasse, der benutzte Klassenoperator :- oder ->) und die an die Funktion übergebenen Argumente. RTFM [...]
a) habe ich das Manual gelesn, aber:
b) stht da nicht genau, was mit "aktuelle Zeilennummer" bzw. "aktueller Datei" gemeint ist. Ist es Datei und Zeile zum Zeitpunkt des Funktionsaufrufs? Ist es die zum Zeitpunkt des Funktionsaufrufs, in der debug_backtrace genutzt wird? Das meinte ich damit. Das habe ich im übriegn immernoch nicht getestet.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Namensgebung der Variablen WarrenFaith Allgemeine Java-Programmierung 9 14.07.2007 05:21
PHP Variablen Michael PHP-Programmierung 1 23.09.2006 00:12
Rechnen mit Variablen Bookworm PHP-Programmierung 28 24.11.2005 16:49
Variablen Namen ausgeben Gottzilla Allgemeine Java-Programmierung 10 15.02.2005 19:17


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:29 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44