Mailinglisten-Archive |
Hallo Matthias, Matthias Stierli wrote: >>>Ich frage mich ein wenig, was ihr von static denn anderes erwartet. >>>Was wäre denn der Unterschied zwischen einer normalen Eigenschaft und >>>einer static-Eigenschaft, wenn nicht eben genau dieses klassenglobale >>>Verhalten? >> >>Eine Eigenschaft ist eben an das Objekt, die mit static definierte >>Variable >>an die Klasse gebunden. > > Genau das habe ich ja geschrieben, mir ging es darum, ob das jemand anders > sieht. Es gab in dieser Diskussion Leute, die über dieses Verhalten > überrascht waren. Also, mich hatte überrascht, dass sich Methoden verschiedener Objekte ihre static-Variablen teilen. Selbst wenn man das Objekt zerstört und ein neues bildet, bleibt diese static-Variable erhalten, oder genauer gesagt: feiert Auferstehung. Offenbar hat das auch einige Kommentatoren des Manuals überrascht, denn die haben extra darauf hingewiesen. Da es aber das gleiche Verhalten ist wie in C++, nehme ich inzwischen an, dass das so sein soll. (Vielleicht weiß jemand, wie es z.B. in Java oder anderen objektorientierten Sprachen gelöst ist.) Static-Variablen in Funktionen kann man besonders dann brauchen, wenn man diese Funktionen rekursiv aufruft. Bei mir ging es darum, die Navigation für verschiedene Seiten einer Website aus einem Baum zu generieren. Dafür brauchte ich jedesmal ein "frisches" Objekt. Dabei hat es gestört, dass die static-Variablen nicht automatisch bei 0 anfingen, sondern aus längst vergangenen Objekten weitergezählt wurden. > Ich schreibe ja, dass das Verhalten von PHP diesbezüglich seltsam ist, da > es aus einer static-definierten Variable (ob das jetzt Sinn macht oder > nicht) eine klassenglobale Variable macht, so jedenfalls verstand ich das > zu Beginn. > Mir ist schon klar, dass das keinen Sinn macht, aber das schrieb ich ja > genau in meinem Beitrag, scheint mir als solltest du die Texte nicht zu > stark überfliegen :) Ich bin zwar nicht angesprochen, aber: obwohl ich Deine Beiträge genau gelesen habe, kann ich ebenfalls nicht genau nachvollziehen, was Du uns genau sagen willst. Vielleicht habe ich zu intensiv gelesen. ;-( Mein Problem war bisher, den Sinn zu finden, warum sich verschiedene Objekte einer Klasse die static-Variablen teilen sollten. Aber mir dämmert es langsam. Ein theoretisches Beispiel: Klasse Kuehe mit den Objekten Alma, Berta, Cleo. Die Methode ist add_liter($liter), Innerhalb dieser Methode gibt es eine static $gesamtliter, zu der immer die $liter addiert werden. In diesem Fall werden alle Milcherträge sozusagen in einer gemeinsamen (Milchsee-)Variablen gesammelt. Will ich nur die Erträge einer Kuh addieren, kann ich static nicht verwenden! Dafür brauche ich dann eine var $einzel_milch, auf die ich dann z.B. mit $bertas_milch = Berta->get_milchmenge(); zugreifen kann. Die gemeinsame static-Variable schafft quasi eine Verbindung zwischen den verschiedenen Objekten, ohne dass man mit (globalen) Variablen außerhalb der Objekte arbeiten muss. So, und nun hoffe ich, dass mit dieser Milchmädchen-Klasse alle Klarheiten restlos beseitigt sind. Viele Grüße Peter
php::bar PHP Wiki - Listenarchive