SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 21.08.2010, 18:40:45
Benutzerbild von Domi
Domi Domi ist offline
Senior Member
 
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
foreach und Referenzierung?

Hallo Zusammen,

verstehe gerade nicht was hier passiert. Folgendes:

früher hätte ich sowas gemacht:

PHP-Code:
foreach ($filme as $key=>$film)
  
$filme[$key] = ucfirst($film); 
nun dachte ich mir, gibst einfach ne Referenz mit und greifst direkt auf den Wert zu:

PHP-Code:
foreach ($filme as &$film)
  
$film ucfirst($film); 
Variante 1 funktioniert, Variante 2 verhält sich merkwürdig:

PHP-Code:
$filme = array('film1''film2'"Film3");

var_dump($filme);

foreach (
$filme as &$film)
  
$film ucfirst($film);

var_dump($filme); 
Ergebnis:

Code:
array(3) {
  [0]=>
  string(5) "film1"
  [1]=>
  string(5) "film2"
  [2]=>
  string(5) "Film3"
}
array(3) {
  [0]=>
  string(5) "Film1"
  [1]=>
  string(5) "Film2"
  [2]=>
  &string(5) "Film3"
}
wie man sieht ist der 3. Wert vom typ &string.

Wenn ich nun versuche es auszugeben passiert sowas:

PHP-Code:
foreach ($filme as $key=>$film)
  echo 
"$key $film <br />"
Code:
0 Film1
1 Film2
2 Film2
Wie man also sieht hat man jetzt nicht mehr Film 1, 2 und 3, sondern 1, 2 und NOCHMAL 2

Wer erklärt mir nun warum das so ist? Bzw. was ich da nicht verstanden habe? (Ob es Sinn macht in ner foreach die Strings mit ucfirst zu behandeln oder nicht sein mal ganz egal, darum gehts auch gar nicht.)

Freu mich auf Antworten!

Domi
__________________

the best way to be ready for the future is to invent it

Geändert von Domi (23.08.2010 um 11:46:14 Uhr)
Mit Zitat antworten
  #2  
Alt 21.08.2010, 23:07:06
Benutzerbild von Domi
Domi Domi ist offline
Senior Member
 
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
AW: foreach und referenzierung?

Bin selber zur Lösung gekommen.

PHP-Code:
unset($film); 
nach dem foreach und das ganze Problem ist erledigt. Somit kann der Wert im Array später nicht mehr versehentlich überschrieben werden.

Es steht auch nochmal im manual: http://de2.php.net/manual/en/control...es.foreach.php

Zitat:
Warnung: Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset().
__________________

the best way to be ready for the future is to invent it
Mit Zitat antworten
  #3  
Alt 21.08.2010, 23:43:10
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: foreach und referenzierung?

Ekelig!
Ist bei mir auch.... :(

Zitat:
Es steht auch nochmal im manual:
Auch das noch...
Kein Bug, sondern ein Feature.. Grr..
Mit Zitat antworten
  #4  
Alt 23.08.2010, 11:51:08
Benutzerbild von Domi
Domi Domi ist offline
Senior Member
 
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
AW: foreach und Referenzierung?

Mir fällt ehrlich gesagt auch gar kein Fall ein, in welchem mir dieses "Feature" was bringen könnte :)
__________________

the best way to be ready for the future is to invent it

Geändert von Domi (23.08.2010 um 12:09:25 Uhr)
Mit Zitat antworten
  #5  
Alt 23.08.2010, 12:12:17
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: foreach und Referenzierung?

Dank Dir, ist in mir die Einsicht gereift auf Referenzen in Foreach zu verzichten. Mit diesen Seiteneffekten will ich mich nicht rum schlagen müssen. Solche Angelegenheiten werden jetzt nur noch per array_map oder _walk erledigt.
Mit Zitat antworten
  #6  
Alt 23.08.2010, 12:17:26
Benutzerbild von Domi
Domi Domi ist offline
Senior Member
 
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
AW: foreach und Referenzierung?

hab gerade nen Link von den Jungs von phphatesme bekommen: http://schlueters.de/blog/archives/1...d-foreach.html

da versteht man es, was genau passiert! Interessant!

Habe übrigens mal eeeeewig in einem Projekt gesucht warum es falsche Werte liefert. Man geht immerhin davon aus, dass foreach das macht, was man davon erwartet.
__________________

the best way to be ready for the future is to invent it
Mit Zitat antworten
  #7  
Alt 23.08.2010, 12:58:37
cortex cortex ist offline
SELFPHP Profi
 
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
AW: foreach und Referenzierung?

Zitat:
Zitat von DokuLeseHemmung Beitrag anzeigen
[...] ist in mir die Einsicht gereift auf Referenzen in Foreach zu verzichten. Mit diesen Seiteneffekten will ich mich nicht rum schlagen müssen.
dito. war mir dieses problems auch nicht bewusst und werde bestehende codes entsprechend anpassen.

cx
Mit Zitat antworten
  #8  
Alt 23.08.2010, 21:05:44
Benutzerbild von Domi
Domi Domi ist offline
Senior Member
 
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
AW: foreach und Referenzierung?

naja mit dem entsprechenden unset() sollte ja eigtl alles erledigt sein..
__________________

the best way to be ready for the future is to invent it
Mit Zitat antworten
  #9  
Alt 26.08.2010, 02:57:38
Benutzerbild von CeBe
CeBe CeBe ist offline
Anfänger
 
Registriert seit: Oct 2008
Ort: Freden
Alter: 35
Beiträge: 37
CeBe eine Nachricht über ICQ schicken CeBe eine Nachricht über Skype™ schicken
AW: foreach und Referenzierung?

Also nach dem Lesen des Blogartikels von Johannes Schlüter ist ja ziemlich klar was passiert und warum. Mit dem Wissen ists ne super Sache und problemlos einsetzbar.
Solche Sachen nerven einfach nur:
PHP-Code:
$item[$i]['bla'] = '...'
mich zumindest :-)

MfG
Carsten
__________________
Mit Zitat antworten
  #10  
Alt 26.08.2010, 12:35:39
cortex cortex ist offline
SELFPHP Profi
 
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
AW: foreach und Referenzierung?

Zitat:
Zitat von Domi Beitrag anzeigen
mit dem entsprechenden unset() sollte ja eigtl alles erledigt sein
und

Zitat:
Zitat von CeBe Beitrag anzeigen
nach dem Lesen des Blogartikels [...] problemlos einsetzbar
foreach verhält sich in verbindung mit referenzen nicht so, wie's der gesunde menschenverstand erwarten würde; das ergebnis muss händisch korrigiert werden. ich persönlich habe damit ein prinzipielles problem. man muss doch nicht alles (mit-)machen, nur weil's sich irgendwie hinbiegen lässt...

schlüter meint dem entsprechend auch:

Zitat:
References in PHP are bad. Do not use them.
quelle: Do not use PHP references

cx
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit foreach kasalgado PHP Grundlagen 3 16.03.2009 16:17:33
foreach schleifen und mehrer Tabellen Timberwolf PHP Grundlagen 1 21.08.2008 18:08:13
array / foreach reinhardlange PHP für Fortgeschrittene und Experten 10 31.05.2008 15:04:28
Alle Datensätze ausgeben / Foreach Problem _mil28 PHP Grundlagen 2 23.01.2006 16:01:53
smarty: foreach ingo PHP für Fortgeschrittene und Experten 2 10.08.2004 00:10:09


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


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt