dedlfix: HTTP-Cache

Beitrag lesen

echo $begrüßung;

Wenn verschiedene Teile einer größeren Software die selbe URL haben wollen und die noch nicht gecacht ist oder ihr Verfallsdatum überschritten hat, wird sie so oft heruntergeladen wie Kopien von HTTPCache erstellt werden, bei der Referenz ist das nicht so.

Ich nehme an, du hast das noch nicht verstanden. Beim Erzeugen der Instanz der HTTPCacheDB-Klasse

$conn = new HTTPCacheDB(); // nur ein = , kein =&

ist es nicht nötig, eine Referenz auf das erzeugte Objekt zu halten. Eine Kopie macht es auch.
Mit obigem Befehl, wird durch das new zunächst eine Instanz erzeugt. Durch die Zuweisung zu $conn wird eine Kopie des zuzuweisenden Ausdrucks erstellt und in $conn abgelegt. Die eigentlich erzeugte Instanz wird verworfen, die in $conn liegende Kopie ist nun deine einzige Instanz. (Bei dem eben beschriebenen Vorgang treffen zwei normale Verhaltensweisen von PHP aufeinander: das, was PHPs bei new macht und das, was es bei einer normalen Zuweisung macht.)

$conn liegt lokal in der getInstance()-Methode. Um die in $conn liegende Instanz aus getInstance heraus zu bekommen, muss sie als Rückgabewert ausgegeben werden. Dabei darf allerdings keine Kopie erstellt werden. Deshalb muss die Rückgabe per Referenz erfolgen.

So sieht das dann in Code aus:

function &getInstance() { // <-- da kommt das & hin  
  static $conn = null;  
  
  if ($conn == NULL) {  
    $conn = new HTTPCacheDB();  
    $conn->open();  
  }  
  
  return $conn;  
}

Da fehlen jetzt nur noch geeignete Maßnahmen, falls das open() fehlschlägt.

Und beim Zugreifen ist ebenfalls das Referenzieren nicht zu vergessen:

$httpcachedb_instance =& getInstance();

echo "$verabschiedung $name";