brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here!

Antwort
 
LinkBack (1) Themen-Optionen Thema bewerten
  #16 (permalink)  
Alt 07-09-2011, 00:03
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
fireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Zitat:
Abgesehen von "cyclic references" sollte das aber möglich sein. Wenn nicht, ist irgendwas am Code unsauber.
Das hat nichts mit unsauberen Code zu tun.
"Unsauber" ist vielleicht nicht das passende Wort.
(PHP-)Referenzen bleiben "zählbar", wenn man sie vernünftig einsetzt. Für Objekte und "Resourcen" benötigt man keine (expliziten) Referenzen. Bei Arrays kommts auf den Einzelfall an.
__________________
PHP-Code:
class Brick implements Throwable {
    
// ... 


Geändert von fireweasel (07-09-2011 um 00:44 Uhr)
Mit Zitat antworten
  #17 (permalink)  
Alt 07-09-2011, 01:03
Benutzerbild von mermshaus mermshaus
 Registrierter Benutzer
Links : Onlinestatus : mermshaus ist offline
Registriert seit: Jun 2009
Beiträge: 165
mermshaus wird schon bald berühmt werden
Standard

Ninja-Edit @fireweasel: Ich habe mit dieser Antwort gerade übelste Race Conditions bezüglich deiner Edits. Sorry dafür.

Hast du den Satz mit Stack Overflow wieder rauseditiert? Na ja, egal.

(Verlinkter Artikel: Parameter passing in Java - by reference or by value?. Durchaus interessant zu lesen.)

Das predige (auch) ich seit langem.[1]

Zitat:
Zitat von fireweasel
In allen anderen Fällen auch. Sämtliche anderen Variablen, die dieses Objekt referenzieren, zeigen dann auch auf null.
Ja, die es (besser gesagt die Variable) (im PHP-Sinne) referenzieren… Gut, so gesehen ist deine Aussage völlig richtig. Ich bin aber nicht sicher, dass wahsaga wirklich Referenzen meinte.

Referenzen spielen bei Objekten in aller Regel absolut keine Rolle.

Es ist schon bemerkenswert, wie sehr man sich auch als gestandener PHP-Programmierer dabei immer wieder in Definitionen oder ungenauer Ausdrucksweise verheddert.[2]



[1] Schamlos!
[2] Die Aussage beziehe ich natürlich zuerst auf mich selbst.
__________________
Blog | Buch | Kaloa
Mit Zitat antworten
  #18 (permalink)  
Alt 07-09-2011, 07:33
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 2.328
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von fireweasel Beitrag anzeigen
"Unsauber" ist vielleicht nicht das passende Wort.
(PHP-)Referenzen bleiben "zählbar", wenn man sie vernünftig einsetzt. Für Objekte und "Resourcen" benötigt man keine (expliziten) Referenzen. Bei Arrays kommts auf den Einzelfall an.
Objekte werden in PHP immer als Referenz übergeben. OK, es ist keine richtige Referenz, aber trotzdem werden Objekte nicht immer gelöscht, nur weil man eine Variable auf NULL setzt oder unset() verwendet. Das sollte einem bewusst sein.

Auch macht es selten Sinn Variablen auf NULL zu setzen, weil sie am Ende jeder Funktion sowieso automatisch gelöscht werden. Wie gesagt, die Variablen, und nicht unbedingt die Objekte. Es ist nur unnötige Schreibarbeit. Und globale Variablen sollte man sowieso nicht verwenden.

Das selbe gilt für Objektvariablen. Wenn ein Objekt gelöscht wird, werden auch automatisch alle Objektvariablen gelöscht. Deswegen ist es auch ziemlich sinnlos sie im Destruktor nochmal explizit zu löschen bzw. auf NULL zu setzen.

Geändert von h3ll (07-09-2011 um 07:41 Uhr)
Mit Zitat antworten
  #19 (permalink)  
Alt 07-09-2011, 14:22
Benutzerbild von mermshaus mermshaus
 Registrierter Benutzer
Links : Onlinestatus : mermshaus ist offline
Registriert seit: Jun 2009
Beiträge: 165
mermshaus wird schon bald berühmt werden
Standard

Zitat:
Zitat von h3ll
Objekte werden in PHP immer als Referenz übergeben. OK, es ist keine richtige Referenz, …
Ich seh's so:

(„Objektvariable“ meint hier: eine Variable, deren Wert ein Object Identifier ist. Public/private/protected Variablen innerhalb einer Klasse sind für mich Instanzvariablen.)

Zitat:
Die Parameterübergabe sowohl von primitiven Datentypen (float, string, …) als auch von Objekten geschieht standardmäßig als Call-by-value. Auch Objekte werden nur dann by-reference übergeben, wenn dies durch das &-Zeichen in der Funktionssignatur explizit vermerkt ist. Der Inhalt (im Sinne von value) einer Objektvariable sind nicht die Instanzdaten selbst, sondern eine Art Ressourcen-Kennung (Object-Identifier), über die PHP auf die Instanzdaten zugreift.

PHP-Code:
// Call-by-value
function f($a) {
    
$a null;
}

// Call-by-reference
function g(&$a) {
    
$a null;
}

$s 'foo'f($s); var_dump($s); // string(3) "foo"
$s 'foo'g($s); var_dump($s); // NULL

$o = new stdClass(); f($o); var_dump($o); // object(stdClass)#1 (0) { }
$o = new stdClass(); g($o); var_dump($o); // NULL 
- 4.1: Don't panic! The Hitchhiker's Guide to PHP oddities - php.de

Noch kurz zur Verdeutlichung:

Zitat:
Zitat von h3ll
…aber trotzdem werden Objekte nicht immer gelöscht, nur weil man eine Variable auf NULL setzt…
Es sei denn, alle Variablen, die auf ein Objekt zeigen, sind Referenzen. (Nein, das ist nicht sonderlich realistisch.)

PHP-Code:
$a = new stdClass();
$b $a;

$b null;

var_dump($a$b); // object(stdClass), NULL


$c = new stdClass();
$d = &$c;

$d null;

var_dump($c$d); // NULL, NULL 
Zitat:
…oder unset() verwendet. Das sollte einem bewusst sein.
unset entfernt auch bei Referenzen lediglich das Symboltabellenalias, hat aber keinerlei Auswirkung auf den Inhalt.

PHP-Code:
$e = new stdClass();
$f $e;

unset(
$f);

var_dump($e$f); // object(stdClass), NULL


$g = new stdClass();
$h = &$g;

unset(
$h);

var_dump($g$h); // object(stdClass), NULL 
__________________
Blog | Buch | Kaloa
Mit Zitat antworten
  #20 (permalink)  
Alt 07-09-2011, 14:40
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 2.328
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Ich kenn den Unterschied zwischen Referenz und Object-Identifier und zwischen unset und Zuweisung. Aber trotzdem danke für die ausführliche Schilderung. Dafür war ich selber zu bequem

Wie du schön gesagt hast, wenn man nur Referenzen verwendet, kann man Objekte (fast) zuverlässig löschen. Nur haben Referenzen so viele mögliche Seiteneffekte, dass man besser die Finger davon lässt.
Mit Zitat antworten
  #21 (permalink)  
Alt 07-09-2011, 14:47
Benutzerbild von mermshaus mermshaus
 Registrierter Benutzer
Links : Onlinestatus : mermshaus ist offline
Registriert seit: Jun 2009
Beiträge: 165
mermshaus wird schon bald berühmt werden
Standard

Offtopic:
Ja, ist mir klar, dass du den kennst. Ich dachte, weil wir hier die Begrifflichkeiten teilweise durcheinander gewürfelt haben, schreibe ich's mal einmal sauber auf.
__________________
Blog | Buch | Kaloa
Mit Zitat antworten
Antwort

Lesezeichen


LinkBacks (?)
LinkBack to this Thread: http://www.php-resource.de/forum/php-developer-forum/102144-destrutor-problem.html
Erstellt von For Type Datum
- RSS Feed URL - Blog RSS Feed This thread Refback 05-09-2011 21:31

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
problem, das wäre aber ein recht nutzloser titel deshalb: logik-problem o.o! newhx PHP Developer Forum 5 21-01-2003 16:46

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

MariaDB 5.5 veröffentlicht
MariaDB 5.5 veröffentlichtDie freie MySQL-Alternative MariaDB wurde in der stabilen Version 5.5.23 veröffentlicht und soll einige Verbesserungen gegenüber Oracles Communityversion von MySQL mitbringen.

16.04.2012 | Berni

Deutsche Yii Framework Community
Deutsche Yii Framework CommunitySeit dem 19.03.2012 gibt es für die Yii PHP Framework Community ein deutsches Zuhause.

20.03.2012 | dhcomputer

 

Aktuelle PHP Scripte

EM 2012 Tipp-Spiel ansehen EM 2012 Tipp-Spiel

Online Tipp-Spiel zur Fussball Europameisterschaft 2012, basierend auf php-Script mit hinterlegter mySql-Datenbank

27.05.2012 tippimnetz | Kategorie: PHP/ Spiele
Advanced Login ansehen Advanced Login

Login-System und Kundenverwaltung, die sich spielend leicht in bestehende Webseiten einbauen lässt und einen enormen Funktionsumfang bietet. Ihre eigene Webseite muss mit Advanced Login nicht umständlich an ein fertiges System angepasst werden.

25.05.2012 Madden | Kategorie: PHP/ Kundenverwaltung
BROM CMS/BelCal 3 ansehen BROM CMS/BelCal 3

Spezielles CMS für Betreiber von Ferienwohnungen. Komplette Seitenerstellung online, Verwaltung mehrerer Objekte, Reservierungssystem mit sofortigem Abgleich im Belegungskalender und vieles mehr bietet dieses Content Management System.

25.05.2012 belcal2 | Kategorie: PHP/ CMS
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:22 Uhr.