Sie befinden sich aktuell in den linux-blog - Fa. anracon - Dr. Mönchmeyer Blog-Archiven für den folgenden Tag 20.6.2008.
| M | D | M | D | F | S | S |
|---|---|---|---|---|---|---|
| « Mai | Jul » | |||||
| 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 | ||||||
- Allgemein (1)
- Cups, Druck (1)
- Erfahrungsberichte (59)
- Firewall Netfilter Iptables (1)
- Hardware, Treiber (11)
- Impressum (1)
- KDE (30)
- Kontact - Kmail (7)
- LAMP / Webentwicklung (21)
- Linux 3D Desktop (7)
- Netzwerk (6)
- Office und OpenOffice (7)
- Open Source (1)
- Open-Xchange (7)
- Postfix, Cyrus, Kmail (5)
- Sound (6)
- Verschlüsselung (Mail, SSH) (4)
- VMware Workstation (11)
- Web - Browser und Co. (10)
- 28.8.2010: Kontact, Kmail, Address Book - Nachtrag 2
- 28.8.2010: Lokale MySQL-/PhpMyAdmin-Installation
- 25.7.2010: Lokaler Apache/PHP-Testserver
- 20.7.2010: Vererbung von ext3-/ext4-Gruppenrechten
- 25.6.2010: Kontact, Kmail, Adressbuch - Nachtrag
- 30.5.2010: OO 3.2.1.2 und KDE
- 29.5.2010: Amarok 2 - Abstürze beim Abspielen von CDs
- 29.5.2010: Ärgerliche Probleme der OO-Integration in KDE 4
- 16.5.2010: Spellchecking, KDE 4, OO 3, Thunderbird
- 2.5.2010: KDE 4, Sortierung, Groß-Klein-Schreibung, Bash
- August 2010
- Juli 2010
- Juni 2010
- Mai 2010
- April 2010
- März 2010
- Februar 2010
- Januar 2010
- Dezember 2009
- November 2009
- Oktober 2009
- September 2009
- August 2009
- Juli 2009
- Juni 2009
- Mai 2009
- April 2009
- Februar 2009
- Januar 2009
- Dezember 2008
- November 2008
- Oktober 2008
- September 2008
- August 2008
- Juli 2008
- Juni 2008
- Mai 2008
- Februar 2008
- Oktober 2007
- September 2007
- Juli 2007
Archive für 20.6.2008
PHP5 - dynamische Variable - superglobale Arrays
20.6.2008 von rmo.
Gestern bin ich an einem kleinen aber interessanten Problem in der PHP-Programmierung hängen geblieben. Manchmal gibt es Situationen, in denen man mit einer dynamisch erzeugten Variablen - also einer Variablen, deren Bezeichnung erst zur Laufzeit festgelegt wird - eine Aufgabe schnell in den Griff bekommt. In meinem Fall versuchte ich, in einem Objekt eine dynamische Variable zu verwenden, die sich situationsbedingt entweder auf das _GET oder das _POST - Array beziehen sollte. Dies misslang zunächst - das Thema ist daher vielleicht auch für andere interessant. Es geht also um die Kombination von dynamischen Variablen mit superglobalen Arrays. Der Reihe nach:
Voraussetzung - Erzeugung von dynamischen Variablen
Einfache dynamische Variable
erzeugt man über folgenden Mechanismus
$dyn = “anracon”;
$$dyn = “anracona”;
echo ” \$dyn hat den Wert: ” . $dyn . “<br>”;
echo ” \$anracon hat den Wert: ” . $anracon . ” ( = identisch mit \$\$dyn : ” . $$dyn . ” ) <br>”;
Dynamische Array-Variable
sind etwas anders zu behandeln. Man beachte die geschweiften Klammern:
$dyna = “ay_anracon”;
${$dyna}[0] = “anracona”;
echo “\$dyna hat den Wert: ” . $dyna . “<br>”;
echo “\$ay_anracon[0] hat den Wert: ” . $ay_anracon[0] . ” ( = identisch mit \${\$dyna}[0] : ” . ${$dyna}[0] . ” ) <br>”;
(Das Ganze geht natürlich auch mit assoziativen Arrays).
Hinweis: Man könnte bei der Erzeugung dynamischer Variable zur Not auch mit “eval()” arbeiten - das ist aber wirklich umständlich und wir lassen das der Übersichtlichkeit halber weg.
Dynamische Bezugnahme auf “Superglobale Arrays”
Man übergibt einem Programm die GET-Variable “snr” - Bsp.: get_parameter.php5?snr=100
Enthält das Programm auf oberster Ebene (also nicht in einer Subfunktion oder einer Methode eines Objekts) folgenden Code:
$b = true;
$ind = ’snr’;
echo ” get_parameter = ” . $_GET[$ind] . “<br>”;
if($b) { $sgv = “_GET”; }
else { $sgv = “_POST”; }
echo ” get_parameter = ” . ${$sgv}[$ind] .”<br>” ;
so erhält man zwei identische Outputzeilen mit dem Inhalt “getparameter = 100″. Die Bezugnahme der dynamischen Array-Variablen ${$sgv} auf das “_GET”-Array funktioniert also wie erwartet.
Bezugnahme auf “Superglobale Arrays” in Objektmethoden
Hat man im Programm eine Klasse und ein zugehöriges Objekt definiert, so kann man mit einer Objektmethode direkt auf das GET-Array zugreifen, da es superglobal ist und sein Geltungsbereich daher nicht mit dem “global”-Statement spezifiziert werden muss. Folgendes funktioniert also innerhalb des Programms “get_parameter.php5″:
class GetParam
{
var $gp;
function __construct()
{
$this->gp = $_GET[’snr’];
}
}
$Ob = new GetParam;
echo ” get_parameter = ” . $Ob->gp . “<br>”;
Dynamische Bezugnahme auf “Superglobale Arrays” in Objektmethoden
Folgendes geht jedoch nicht - trotz superglobaler Gültigkeit des “_GET”-Arrays:
class GetPar
{
var $gp;
function __construct()
{
$b = true; // Nur als Beispiel
if($b) { $sgv = “_GET”; }
else { $sgv = “_POST”; }
$this->gp = ${$sgv}[’snr’];
}
}
$Obj = new GetPar;
echo ” get_parameter = ” . $Obj->gp . “<br>”;
Denkt man etwas darüber nach, so kommt man auf folgende Vermutung: Woher soll der Interpreter wissen, dass er eine globale Variable vorsehen muss? Er wird sich schon aus Sicherheitsgründen vielmehr auf einen lokalen Gültigkeitsbereich der dynamischen Variablen zurückziehen. Dann sollte aber Folgendes helfen:
class GetP
{
var $gp;
function __construct()
{
$b = true; // Nur als Beispiel
if($b) { $sgv = “_GET”; }
else { $sgv = “_POST”; }
//
global ${$sgv};
//
$this->gp = ${$sgv}[’snr’];
}
}
$GP = new GetP;
echo ” get_parameter = ” . $GP->gp . “<br>”;
Tatsächlich erhält man nun den gewünschten Output. Das “global”-Statement ist zwar wirklich nicht schön. Aber bei einer Bezugnahme auf ein superglobales Array kann man diese stilistische Unsauberkeit vielleicht verzeihen.
Abschließende Anmerkung
Ziel dieses Beitrags war es, darauf hinzuweisen, dass man innerhalb von Objektmethoden mit Hilfe dynamischer Variablen nicht ohne weiteres auf superglobale Arrays zugreifen kann. Scheut man das erforderliche “global” - Statement, so muss man seien Lösungen von vornherein anders konzipieren - was in der Regel sicher möglich ist.
(In meinem Fall wollte ich zu Prüfzwecken aus dem Objekt heraus einen direkten (!) Zugriff auf die Arrays ohne Zwischenvariablen gewährleisten und trotzdem die Wahl zwischen _GET und _POST haben.)
Geschrieben in LAMP / Webentwicklung | Keine Kommentare »
Firefox 3 - Schreckliche URL-Liste
20.6.2008 von anne.
Gerade habe ich den neue Firefox 3.0 ausprobiert. Gut gelungene neue Oberfläche - aber:
Die Anzeige der “Chronik” (Liste früher eingegebener URLs) unter dem Adresseneingabefeld finde ich misslungen und unübersichtlich!
Dank eines netten Entwicklers kann man sich aber die alte Anzeige zurückholen. Für eine direkte Installation bitte folgenden Link verwenden:
https://addons.mozilla.org/en-US/firefox/downloads/file/23662/oldbar-1.2-fx.xpi
Nachher ist die Welt wieder in Ordnung - mit einem schönen neuen Firefox Layout und übersichtlicher Chronik. Unter Linux und Windows.
Geschrieben in Web - Browser und Co., Erfahrungsberichte | 1 Kommentar »