Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

$GLOBALS["Object->Var"]?

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
wuschba
PostRank 8
PostRank 8
Beiträge: 655
Registriert: 16.06.2006, 16:37

Beitrag von wuschba » 29.12.2007, 11:25

Hi. Wenn ich in einer PHP-Funktion bin, kann ich ja mittels $GLOBALS auf alle globalen Variablen zugreifen. Als einfaches Beispiel:

function GetValue($varName)
{ return $GLOBALS[$varName];
}

Wie kann ich es nun hinkriegen, dass $varName auch eine Member-Variable in einem Objekt sein darf, also z.B.:

$varName = "Object->Variable";
$varValue = GetValue($varName);

Gibts da ne einfachere Möglichkeit, als $varName nach -> zu durchsuchen und dann manuell zu trennen?

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


nachfrag
PostRank 4
PostRank 4
Beiträge: 174
Registriert: 30.05.2006, 21:20
Wohnort: Westerwald

Beitrag von nachfrag » 29.12.2007, 12:26

Hallo,

vielleicht kannst du noch mal beschreiben, was du erreichen willst?
Selbst wenn du $varName nach -> durchsuchen willst, kann deine Funktion den Wert nicht ermitteln ohne ein global $Objekt oder so ... geeigneter wäre hier vielleicht etwas wie

Code: Alles auswählen

if(isset($objekt) AND is_object($objekt)) ...
Ansonten - vielleicht ein Ansatz, deine Objekte in globalen Variablen zu speichern?
Dann kannst du immer auf den Wert von $GLOBALS['objekt']->variable zugreifen ...

Ist aber wie gesagt nur ins blaue hinein vermutet, weil ich nicht verstehen kann, was du eigentlich meinst :)

Grüße

seo-theo
PostRank 7
PostRank 7
Beiträge: 536
Registriert: 18.10.2006, 21:10

Beitrag von seo-theo » 29.12.2007, 12:37

klingt nicht wirklich sicher....
Grüße
Seo-Theo

Und wenn du lange in einen Gockel blickst, blickt der Gockel auch in dich hinein.


Bist Du Admin eines großen Forums? Wenn ja, dann klick mal hier...

nachfrag
PostRank 4
PostRank 4
Beiträge: 174
Registriert: 30.05.2006, 21:20
Wohnort: Westerwald

Beitrag von nachfrag » 29.12.2007, 13:21

seo-theo hat geschrieben:klingt nicht wirklich sicher....
ich denke wenn register_globals = off ist, dürfte $GLOBALS ein Array wie jedes andere sein, das nur nicht in eine Funktion "reingeholt" werden muss?

wuschba
PostRank 8
PostRank 8
Beiträge: 655
Registriert: 16.06.2006, 16:37

Beitrag von wuschba » 29.12.2007, 14:39

Danke für die Antworten. Das oben war natürlich nur ein kurzes Beispiel, ich möchte einer Funktion eine Reihe von Werten übergeben, und diese überprüfen. Der Gag soll aber sein, dass die Funktion auch die Möglichkeit haben soll, auf den Variablennamen zugreifen zu können, um z.B. die Variable zu ändern oder um Fehlervariablen zu erstellen.

In der Art:

Code: Alles auswählen

$input1 = "Hallo";
$input2 = "Welt";
$Object = new Object();
$Object->Variable = "a";
$arr = array("input1", "input2", "Object->Variable")
CheckAll($arr);


function CheckAll($arr) {
   foreach($arr AS $varname) {
       if &#40;strlen&#40;$GLOBALS&#91;$varname&#93;&#41; < 2&#41; &#123;
          $GLOBALS&#91;$varname&#93; = ""; // Bei Fehler Variable löschen...
          $GLOBALS&#91;$varname."_Fehler"&#93; = "Zu kurz"; // ... und den Fehlertext setzen
       &#125;
       else &#123;
          $GLOBALS&#91;$varname."_Fehler"&#93; = ""; // Sonst alles ok, also den Fehlertext löschen
       &#125; 
   &#125;
&#125;
Der Code funktioniert bereits mir normalen globalen Variablen, aber halt nicht mit $Object->Variable: Obwohl $Object natürlich auch global definiert ist, ist aber "Object->Variable" kein gültiger Index in GLOBALS.

Was ich machen könnte wäre, $varname nach "->" zu durchsuchen und alles, was davor kommt, aus dem Globals-Array zu nehmen, also der Zugriff
$GLOBALS["Object"]->${"Variable"}
wäre ja korrekt. Das ginge bestimmt auch, ich dachte halt, es geht evtl. irgendwie einfacher.

Anonymous

Beitrag von Anonymous » 29.12.2007, 15:37

überprüf doch vorher was für einen variablentyp du da übergeben hast und behandle ihn dann entsprechend...

https://www.phpcenter.de/de-html-manual ... bject.html

wuschba
PostRank 8
PostRank 8
Beiträge: 655
Registriert: 16.06.2006, 16:37

Beitrag von wuschba » 29.12.2007, 17:13

net(t)worker hat geschrieben:überprüf doch vorher was für einen variablentyp du da übergeben hast und behandle ihn dann entsprechend...

https://www.phpcenter.de/de-html-manual ... bject.html
Ich übergebe ja aber keine Variablenwerte oder Referenzen, sondern nur den Variablennamen, damit ich andere Variablen daraus erzeugen kann ("Variable_Fehler").

is_object($GLOBALS["Object->Variable"]) funktioniert aber ebensowenig, wenn ich nicht vorher den Variablennamen parse.

godzilla
PostRank 4
PostRank 4
Beiträge: 104
Registriert: 28.05.2005, 21:29
Wohnort: Pilsting

Beitrag von godzilla » 01.01.2008, 21:55

ähm, ich denke was auch immer du vorhast es ist der falsche weg!

Zu deinem Problem:

das da: $Object->Variable = "a"; ist ein Methodenaufruf! und keine Variable.
dementsprechend kann das da: $GLOBALS[Object->Variable] niemals ein gültiger Index sein.

evtl. solltest du die Objektvariable auch einer globalen Variablen des aktuellen Skripts zuweisen. $a = $Object->variable;
Dann könntest du deinen Stunt drehen.

Ich rate aber dringenst dazu dein Vorhaben nochmal zu überdenken und es anders zu lösen.

Antworten