php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.12.2008, 22:51  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Dass zirkuläre Referenzen in PHP ein Problem sind, kannst man am Beispiel
PHP-Code:
<?php
class Foo {
  protected 
$id;
  public 
$ref null;
  public function 
__construct($id) {
    
$this->id $id;
  }
  
  public function 
__destruct() {
    echo 
'- '$this->id " wird abgeräumt\n";
  }
}

function 
bar($loop) {
  
$a = new Foo('A'.$loop);
  
$b = new Foo('B'.$loop);
  
$c = new Foo('C'.$loop);
  
  
$a->ref $b;
  
$b->ref $c;
  if ( 
$loop ) {
    
$c->ref $a;
  }
}
echo 
PHP_VERSION' 'PHP_OS' 'PHP_SAPI"\n";
echo 
"Aufruf von bar(0)\n";
bar(0);
echo 
"Aufruf von bar(1)\n";
bar(1);
echo 
"Skriptende\n";
Zitat:
5.2.6 WINNT cli
Aufruf von bar(0)
- A0 wird abgeräumt
- B0 wird abgeräumt
- C0 wird abgeräumt
Aufruf von bar(1)
Skriptende
- C1 wird abgeräumt
- B1 wird abgeräumt
- A1 wird abgeräumt
sehen. Die Instanzen A0, B0, C0 werden beim Verlassen ihres Sichtbarkeitsbereiches (beim Verlassen der Funktion) abgeräumt. A1,B1,C1 - also die mit der Kreisreferenz - erst am Ende des Skripts.

Zitat:
Zitat von Phlegma
Ich hab ma irgendwo gelesen, dass = NULL besser als unset sein soll, weil es den Speicher freigibt.
Das wäre dann ein direkter Fehler in unset(). Kann aber auch durchaus möglich sein, dass es so eine Version von PHP gibt
David ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.12.2008, 23:54  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Nicht sehr übersichtlich dieses Beispiel.
Zitat:
Die Instanzen A0, B0, C0 werden beim Verlassen ihres Sichtbarkeitsbereiches (beim Verlassen der Funktion) abgeräumt. A1,B1,C1 - also die mit der Kreisreferenz - erst am Ende des Skripts.
Aber wieso ist das problematisch? Ist doch nötig, dass das Objekt erhalten bleibt.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 09.12.2008, 00:04  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

In zwei Skripten ist es vielleicht übersichtlicher, ja.
Zitat:
Zitat von nikosch
Ist doch nötig, dass das Objekt erhalten bleibt.
Keines der Objekte ist mehr zugänglich. Wie ein kleines Schwarzes Loch.


Einfacheres Beispiel
PHP-Code:
<?php
class Foo {
  public function 
__destruct() {
    echo 
"*";
  }
}

$a = new Foo;
$b = new Foo;
$a->ref $b;
$b->ref $a;

unset(
$a);
unset(
$b);
echo 
'Skriptende';
Zitat:
Skriptende**
David ist offline  
Alt 09.12.2008, 00:08  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Naja, gut. Da hast Du natürlich recht. Ohne Funktionsrückgabe reichlich sinnfrei.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
User mit PHP aus DB löschen MistaJ PHP Tipps 2008 10 01.12.2008 19:38
[Erledigt] Bestimmten Datensatz aus SESSION Array löschen! litterauspirna PHP Tipps 2008 13 27.08.2008 18:05
[Erledigt] Benutzer in phpbb löschen - per sql-Befehl Datenbanken 2 23.12.2005 09:52
Bilder löschen PHP Tipps 2005-2 4 24.10.2005 11:37
[Erledigt] Löschen aus Tabelle mit ID-Übergabe Datenbanken 8 20.10.2005 22:10
Vor dem löschen abfragen ob man wirklich löschen will PHP Tipps 2005-2 1 05.09.2005 11:54
Problem mit PFad Firefox - Verzeichnis löschen PHP Tipps 2005-2 0 19.07.2005 16:05
Verzeichnis löschen - falscher Webserverbenutzer ?! PHP Tipps 2005-2 11 09.07.2005 00:35
[FRAGE] Datein per PHP löschen. PHP Tipps 2005 21 11.05.2005 19:36
[Erledigt] Sicherheitsabfrage beim Löschen aus DB PHP Tipps 2005 6 05.04.2005 10:24
server probleme datei löschen Rotti PHP Tipps 2004-2 7 30.12.2004 13:51
Datei löschen mit unlink PHP Tipps 2004-2 4 30.11.2004 00:36
kompletten Ordner löschen??? 18inch PHP Tipps 2004 5 03.09.2004 09:52
Datensatz löschen: Destruktor / Instanz löschen? PHP Tipps 2004 9 09.06.2004 01:44

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/php-tipps-2008/49481-destruktor-instanz-loeschen-2.html

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:35 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum