| 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! |
 |

21-08-2010, 19:57
|
|
MalerJ
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 6
|
|
PHP Referenzen in foreach Schleife
Hallo zusammen!
Da ich gerade dabei bin mir PHP anzueignen, lese ich mir so einige Tutorials bzw. Anleitungen durch und da bin ich eine Äußerung gestoßen mit der ich nichts anzufangen weiß. Es wird in einem Tutorial zum Thema Arrays davon gesprochen, dass man die Daten eines Arrays nur dann in einer foreach Schleife bearbeiten kann, wenn man mit "Referenzen" arbeitet.
Ich weiß jedoch nicht was eine Referenz ist und die offizielle Beschreibung ist auch mehr als mau. Daher meine Frage: Was ist eine Referenz in bezug auf PHP bzw. eine foreach Schleife?
Gruß
Jens
|

21-08-2010, 20:40
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
PHP-Code:
$original = 1; $kopie = $original; $referenz =& $original;
echo $original; // 1
echo $kopie; // 1
echo $referenz; // 1
$kopie = 2; $referenz = 3;
echo $original; // 3
echo $kopie; // 2
echo $referenz; // 3
|

21-08-2010, 22:26
|
|
MalerJ
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 6
|
|
Vielen Dank h3ll! Manchmal sagt code mehr als 1000 Worte
|

21-08-2010, 22:52
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Zitat:
|
PHP Referenzen in foreach Schleife
|
Dazu habe ich gerade einen lustigen Thread gefunden!
foreach und referenzierung? - SELFPHP Forum
hier mal mein Testcode:
PHP-Code:
<?php
error_reporting(-1);
ini_set('display_errors', TRUE);
$filme = array('film1', 'film2', "film3");
var_dump($filme);
echo "<br />";
foreach ($filme as &$film)
$film = ucfirst($film);
var_dump($filme);
echo "<br />";
foreach ($filme as $key=>$film)
echo "$key $film <br />";
?>
|

22-08-2010, 09:22
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
das kann sich eigentlich nur darauf beziehen, wenn man Werte des Array manipulieren will und wieder im Array ablegen will.. meine eigene Erfahrung sagt
foreach($array as $key=>$element) {
...
}
reicht meist aus
und da seh ich keine Referenz
__________________
Wer LESEN kann, ist klar im Vorteil!
|

22-08-2010, 10:00
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Was du da siehst, ist mir egal .....
Was ich da sehe:
Da wurde ein Feature eingeführt, welches nicht richtig funktioniert. Und anstatt es zu reparieren, wurde es im Handbuch dokumentiert.
Der blanke Wahnsinn!
Und was ist, wenn das letzte Element noch gebraucht wird?
Da gibts dann nur einen Weg: Erst einen Dummy ans Array dran kleben und nach der Schleife wieder löschen.
Pfusch!
Pfusch!
Pfusch!
(da könnte ich mich noch Stunden drüber aufregen)
array_(map/walk) ist auch nicht immer der schönste Weg.
"
|

22-08-2010, 10:20
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
*nix*
Geändert von h3ll (22-08-2010 um 10:22 Uhr)
|

22-08-2010, 10:23
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
aber hell .. sollte in deinem ersten Codeschnipsel
$filme[$i]=ucfirst($filme[$i]);
auch tun?
__________________
Wer LESEN kann, ist klar im Vorteil!
|

22-08-2010, 10:28
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Nein, das sehe ich anders. "Funktioniert nicht richtig" ist falsch, es gibt nichts zu reparieren. Das Feature (foreach) hat gewisse Seiteneffekte, die im Manual dokumentiert sind. Diese Effekte nimmt man in Kauf, um die Ausführungsgeschwindigkeit hoch zu halten. Wenn du mit den Effekten nicht leben kannst, führe vor jedem foreach ein reset($filme) aus und nach dem foreach ein unset($film).
Anders ausgedrückt: Die PHP-Entwickler haben das Aufräumen nach dem foreach nicht implementiert, so dass es dem Anwender überlassen bleibt. Damit kann er selbst entscheiden, ob ihm Performance oder "Sauberkeit" wichtiger ist.
C-Programmierer kennen das, die müssen immer selber aufräumen. ;-)
|

22-08-2010, 10:32
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Zitat:
PHP-Code:
$filme[$i]=ucfirst($filme[$i]);
|
Na klar tuts das!
Aber nichts desto Trotz:
Wenn man schon Referenzen in Foreach einführt, dann sollte man das richtig machen.
Und nicht so was kaputtes produzieren.
Manchmal verstehe ich die PHP Entwickler nicht.
Zitat:
|
aus und nach dem foreach ein unset($film)
|
wenn ich die Daten in der Schleife verändere, dann will ich danach noch damit weiter arbeiten.
Sonst bräuchte ich sie ja nicht darin zu veränden.
Zitat:
Die PHP-Entwickler haben das Aufräumen nach dem foreach nicht implementiert, so dass es dem Anwender überlassen bleibt. Damit kann er selbst entscheiden, ob ihm Performance oder "Sauberkeit" wichtiger ist.
C-Programmierer kennen das, die müssen immer selber aufräumen. ;-)
|
Schöne Argumente...
Nur sind wir hier nicht in C.. 
Mal abwarten, was uns die PHP Entwickler, mit solchen oder ähnlichen Argumenten, noch so alles unterjubeln.
Geändert von combie (22-08-2010 um 10:38 Uhr)
|

22-08-2010, 21:06
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Zitat:
Zitat von combie
wenn ich die Daten in der Schleife verändere, dann will ich danach noch damit weiter arbeiten.
Sonst bräuchte ich sie ja nicht darin zu veränden.
|
Das unset() wird benutzt um die Referenz auf den letzten Arrayeintrag zu zerstören. Der Eintrag selbst bleibt davon unberührt.
Wären Referenzen in foreach so implementiert wie du es dir wünscht, gäbe es diese Referenz gar nicht mehr. In diesem Sinne macht dieses unset() nichts kaputt sondern ganz.
Ich gebe zu, dass es nicht ganz zur Sprache passt, wie die Entwickler das umgesetzt haben. Aber mal ehrlich, wer in foreach mit Referenz arbeitet, der ist ein Pro und weiß was er tut. Solche Leute können auch mit den Nebenwirkungen umgehen, sollte man meinen.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| 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.
HTML-Code ist aus.
|
|
|
|
PHP News
|