hi,
hi,
"Praktische Closures
Theorie beiseite und ein mal nachgefragt: Sind denn Closures tatsächlich auch nützlich? Finden wir es heraus, indem wir Überlegungen zum praktischen Nutzen von Closures anstellen. Eine Closure erlaubt die Verknüpfung von Daten (aus der Umgebung) mit einer Funktion, die mit diesen Daten arbeitet. Dies hat Ähnlichkeit mit objektorientierter Programmierung, wo Daten über Objekte (die Eigenschaften des Objekts) mit Methoden verknüpft werden."
https://developer.mozilla.org/de/docs/JavaScript/Guide/Closures
Threaddrift, wie Du als einer der dienstältesten Stammposter ja weißt, sind hier übrigens durchaus nicht ungern gesehen, falls überhaupt. Die Frage ist, da PHP ja über Objekte/Klassen mit privaten und öffentlichen Variablen verfügt (anders als Javascript), ob Du mit diesem Beispiel eine sinnvolle Verwendung für eine Closure erstellst. Meine Hypothese: Nein. Es ist zudem, wie Du ja weißt, Sitte im Forum, darauf hinzuweisen, wenn ein "falscher" Ansatz verfolgt wird. Schon gar, wenn das nachher im Wiki landen soll(te).
Der wesentliche Unterscherschied bei der Memoizer-Funktion http://forum.de.selfhtml.org/my/?t=217478&m=1493981 ist ja, dass das Ding eine Funktion zurück gibt und dass eine private Variable in Javascript anders nicht möglich(!) ist.
s.a. "Private
Private members are made by the constructor. Ordinary vars and parameters of the constructor becomes the private members.
function Container(param) {
this.member = param;
var secret = 3;
var that = this;
}
This constructor makes three private instance variables: param, secret, and that. They are attached to the object, but they are not accessible to the outside, nor are they accessible to the object's own public methods. They are accessible to private methods. Private methods are inner functions of the constructor.
function Container(param) {
function dec() {
if (secret > 0) {
secret -= 1;
return true;
} else {
return false;
}
}
this.member = param;
var secret = 3;
var that = this;
}
The private method dec examines the secret instance variable. If it is greater than zero, it decrements secret and returns true. Otherwise it returns false. It can be used to make this object limited to three uses.
By convention, we make a private that variable. This is used to make the object available to the private methods. This is a workaround for an error in the ECMAScript Language Specification which causes this to be set incorrectly for inner functions.
Private methods cannot be called by public methods. To make private methods useful, we need to introduce a privileged method."
http://javascript.crockford.com/private.html
Mich würde mal interessieren, wie Closures in PHP überhaupt Sinn machen. Sie nur zu benutzen, damit es kein OOP-"Mäntelchen" gibt, mag vielleicht eine persönliche Entscheidung für "OOP"-"Hasser" sein, das aber hätte im Wiki hier nix verloren. Es gibt keinen Grund, Dinge zu erklären, die man nur machen kann, weil man sie machen kann. Es muss ja einen Vorteil geben. Bei Javscript mag das zB. die Zuweisung einer Funktion zu einem Eventhandler sein, oder die Erzeugung von privaten, memorisierbaren Variablen. All diese Fälle finde ich bei PHP nicht ...;
mfg
tami