AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler bei php.net melden?

Ein Thema von himitsu · begonnen am 8. Aug 2010 · letzter Beitrag vom 20. Aug 2010
Antwort Antwort
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.879 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Fehler bei php.net melden?

  Alt 8. Aug 2010, 16:19
Führt auch zur Verwirrung. Ich würde von dieser Möglichkeit besser Abstand nehmen
Markus Kinzler
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Fehler bei php.net melden?

  Alt 8. Aug 2010, 17:27
hm. Ich sah das bisher immer als gewissen Performance-Vorteil. Dürfte doch wohl leichter sein, "nur" den Pointer weiterzuschieben, als immer gleich den gesamten Record zu kopieren. Ich habe viele foreach-Schleifen so aufgebaut, auch wenn ich den Wert gear nicht verändere.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.476 Beiträge
 
Delphi 12 Athens
 
#3

AW: Fehler bei php.net melden?

  Alt 8. Aug 2010, 18:03
Bei Strings und Objekten handelt PHP das ja anscheinend sowieso schon als referenzzählende Zeiger.

Aber vorallem beim Ändern fand/finde ich es von Vorteil, daß man direkt auf den Wert zugreifen kann und nicht jedesmal wieder über das Ursprungsobjekt/-array gehn zu, wo dann der Wert ja erneut gesucht werden müßte.

foreach ($this->Parent->Files as $File)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 8. Aug 2010 um 18:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

AW: Fehler bei php.net melden?

  Alt 8. Aug 2010, 21:34
Normalerweise kannst du die Bugs direkt unter http://bugs.php.net melden. Ich werd das morgen aber nochmal bei ein paar PHP-Group-nahen Arbeitskollegen zur Sprache bringen.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

AW: Fehler bei php.net melden?

  Alt 11. Aug 2010, 06:31
Hier mal die Antwort eines PHP-Entwicklers (also Entwickler am Core). Ich hab ihm diesen Beispielcode geschickt:
PHP-Quellcode:
$array = array(' one ', ' two ', ' three ', ' four ', ' five ');
foreach ($array as &$str) $str = trim($str);
foreach ($array as $str) echo $str;
Zitat:
[12:03]<anonym>: foreach ($arr as &$str) {
[12:04]<anonym>: du iterierst über das array, bei jedem iterationsschritt machst du $str zu einer referenz auf das aktuelle element.
[12:04]<anonym>: Eine Referez in PHP ist ein Alias, d.h. alle Referenzen sind 100% gleichberechtigt.
[12:05]<anonym>: nun is die iteration zu ende.
[12:05]<anonym>: Was is die Situation?
[12:05]<anonym>: $str is eine Referenz auf das letzte element im Array.
[12:05]<anonym>: Klar.
[12:05]<anonym>: Also geht es weiter:
[12:05]<anonym>: #
[12:05]<anonym>: foreach ($arr as $str) {
[12:06]<anonym>: wir iterieren wieder und weise bei jedem schritt $str das aktuelle element zu.
[12:06]<anonym>: $str ist aber eine Referenz auf das letzte element im Array.
[12:07]<anonym>: d.h. wenn wir im ersten schritt der zweiten Iteration das erste Element aus dem Array nehmen und $str zuweisen ändert sich zugleich dasletzte element im array
[12:07]<anonym>: das schaut also wie array(' one ', ' two ', ' three ', ' four ', 'one') aus
[12:07]<anonym>: im nächsten schritt weisen wir dem letzten element dem letzten zu
[12:07]<anonym>: ...
[12:08]<anonym>: im vorletzten schritt weisen wir dem letzten element das vorletzte element zu
[12:08]<anonym>: array(' one ', ' two ', ' three ', ' four ', ' four ')
[12:08]<anonym>: und im letzten schritt das letzte dem letzten, also ändert sich nichts
[12:09]<anonym>: kannst du auch beobachten indem du ein print_r($arr) in die zweite iteration packst
[12:09]<anonym>: Don't use references and be happy.
[12:10]<anonym>: Alles klar?
Alles klar?

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.476 Beiträge
 
Delphi 12 Athens
 
#6

AW: Fehler bei php.net melden?

  Alt 11. Aug 2010, 07:38
So in etwa hab ich diese Auswirkung inzwischen auch mitbekommen.
Mit var_dump, statt print_r (hatte sonst auch immer print_r genommen) sieht man auch noch diese Referenz.

Man könnte ja nun auch fragen, warum PHP nicht am Ende der Schleife diese Referenz selber freigibt.
(soviel zu Managed-Umgebungen )
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Aug 2010 um 07:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#7

AW: Fehler bei php.net melden?

  Alt 11. Aug 2010, 12:36
Weil PHP nicht das Denken für dich übernimmt. Die Zählvariable am Ende einer Schleife freizugeben gehört IMHO nicht in den Aufgabenbereich des Script-Interpreters. Ich hatte schon ab und zu mal Fälle, in denen ich die Variable danach noch gebraucht habe.

Liebe Grüße,
Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#8

AW: Fehler bei php.net melden?

  Alt 11. Aug 2010, 20:01
Lesen und fuer immer merken:
Zitat:
[12:09]<anonym>: Don't use references and be happy.
Nach der Schleife ist $str ein Pointer auf $array[4]. Das wird auch immer als Referenz verwendet werden.
Wenn du sowas machst:
PHP-Quellcode:
$i = &$blah;
for ($array as $i => $str) doSomething();
Dann darfst du nicht erwarten, dass $i nicht als Referenz benutzt wird.

Das Reference-Konzept von PHP ist bisserl eigenartig, umso wichtiger ist es dass man es versteht bevor man es verwendet. Ich kann dir wirklich nur den Satz von oben erwaehntem Entwickler ans Herz legen. Der Herr arbeitet seit 10 Jahren mit PHP und ist im Core-Team - wenn der sowas sagt dann ist da was dran.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#9

AW: Fehler bei php.net melden?

  Alt 20. Aug 2010, 14:23
Glueckwunsch - dein Code hats auf den Blog von besagtem Entwickler geschafft, da auch mit einer sehr ausfuehrlichen Erklaerung: http://schlueters.de/blog/archives/1...d-foreach.html

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Antwort Antwort


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 aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz