Hallo!
Ich programmiere schon seit einigen Jahren PHP, erstelle aber gerade die erste Anwendung in der ich Objekte intensiv nutze und stoße auf folgendes Problem:
-Ich habe ein Klasse definiert, in deren Objekte ich Informationen zu Bildern speichern will.
-Mit einer Erzeugerfunktion erzeuge ich einen gewisse Anzahl von Objekten dieser Klasse. Da die Objekte innerhalb einer Funktion erzeugt werden, stehen sie aber nicht global zu Verfügung. Ich benötige die Bildobjekte aber in jeder Situation. Also sowohl außerhalb der Erzeugerfunktion, also auch biem nächsten aufruf innerhalb der Erzeugerfunktion.
Wie kann ich also innerhalb einer Funktion globale Variablen(Objekte) erzeugen, deren Name ich zuvor nicht kenne und die mir anschließen überall zur Verfügung stehen (auch in der Funktion selbst)?
Vielen Dank,
Stefan
Hier mein Beispiel:
Ich programmiere schon seit einigen Jahren PHP, erstelle aber gerade die erste Anwendung in der ich Objekte intensiv nutze und stoße auf folgendes Problem:
-Ich habe ein Klasse definiert, in deren Objekte ich Informationen zu Bildern speichern will.
-Mit einer Erzeugerfunktion erzeuge ich einen gewisse Anzahl von Objekten dieser Klasse. Da die Objekte innerhalb einer Funktion erzeugt werden, stehen sie aber nicht global zu Verfügung. Ich benötige die Bildobjekte aber in jeder Situation. Also sowohl außerhalb der Erzeugerfunktion, also auch biem nächsten aufruf innerhalb der Erzeugerfunktion.
Wie kann ich also innerhalb einer Funktion globale Variablen(Objekte) erzeugen, deren Name ich zuvor nicht kenne und die mir anschließen überall zur Verfügung stehen (auch in der Funktion selbst)?
Vielen Dank,
Stefan
Hier mein Beispiel:
PHP-Code:
<?php
// Speichert die existenz eines Logos
$aLogos = array();
class logo {
var $iId;
function logo($iId) {
$this->iId = $iId;
}
}
function erstelleLogo($iId) {
global $aLogos;
$sName = "logo".count($aLogos);
//Hier versuche ich den zukünftigen Namen des Objektes global zu registrieren
//Das Objekt ist dann auch außerhalb der Funktion präsent, aber nicht bei einem
//erneuten Funktionsaufruf
global $$sName;
// Hier wird geprüft, ob das zu erzeugende Objekt schon existiert
if (in_array ($iId, $aLogos) || is_object($$sName)) {
$key = array_search ($iId, $aLogos);
$sName = "logo".$key;
// Hier wird das Objekt nicht gefunden
echo "$sName ist ein Objekt\"".is_object($$sName)."\"<br>";
return $$sName;
}
// Erstelle es, falls es noch nicht existiert
else {
array_push($aLogos, $iId);
$$sName = new logo($iId);
return $$sName;
}
}
// Erstelle ein Logo "1" (ID:1)
$newLogo = erstelleLogo(1);
echo "newLogo: $newLogo<br>";
echo "LogoID->".$newLogo->iId."<br><br>";
// Erstelle ein Logo "2" (ID:2)
$newLogo = erstelleLogo(2);
echo "newLogo: $newLogo<br>";
echo "LogoID->".$newLogo->iId."<br><br>";
// Prüfe, ob logo0 (ID:1) auch global zu erreichen ist.
// Klappt, wenn In der erstelleLogo Funktion global $$sName verwendet wird
echo "logo0 ist ein Objekt\"".is_object($logo0)."\"<br><br>";
// Ausgabe: logo0 ist ein Objekt"1"
// Versuche erneut ein Logo "1" zu erzeugen.
// Springt beim erstellen in den true Pfad, kann dort aber nicht auf das Objekt zugreifen.
$newLogo = erstelleLogo(1);
// Ausgabe: logo0 ist ein Objekt""
?>
Kommentar