Hallo,
Hallo,
Wenn man trotzdem zugreifen will, bemüht man eben Getter und Setter, wobei sich mir der Sinn dessen nicht ganz erschließt.
Auch darum geht es nicht. Nochmal es ging um klassenweite private Variabeln. Also nicht um wleche die von aussen sichtbar sein müssen.
Dein Beispiel läuft aber darauf hinaus. Wenn du verlangst, dass Methoden eines neu zugewiesenen Prototyps auf die private Variable zugreifen können sollen, dann ist das nunmal "von außen". Zur Zeit der Zuweisung des Prototyps sind die Variablen bereits privat. Eine Halbprivatheit gibt es nunmal nicht.
Die gibt es ja in Klassendefinitionen auch nicht.
<?php
class myClass {
private $_private = "privat";
public $publicVar = "public";
function getPrivate() {
return $this->_private;
}
}
$myInstance = new myClass;
//echo $myInstance->_private; //Fatal Error - Cannot access private Property
echo $myInstance->publicVar; //"public";
echo $myInstance->getPrivate(); //"privat"
PHP und andere kennen noch "protected". Denn "private" lässt sich nicht vererben.
Klassenweite private Variablen kann man in JavaScript doch haben, nur nicht durch nachträglich eingeführte Methoden darauf zugreifen. Muss das überhaupt sein? Geht das in anderen OO-Sprachen? In C# z.B. kann man partielle Klassen deklarieren, aber zur Laufzeit neue Methoden einführen? Die dann auch noch Zugriff auf die privaten Variablen haben? Nicht das ich wüsste...
Warum das so ist, ist eine Grundlage der OOP. Wenn du nicht OO programmierst, brauchst du vielleicht keine Kapselung.
@Struppi: Du weißt doch, dass dies eine sehr eingeschränkte Definition von OOP ist, die so keineswegs allgemein gültig ist. Es gibt Konzepte, die OOP ganz ohne Vererbung fassen, anders als die von Sun/Java. Ich fände es ja zielführender, hier nicht immer nur auf dieser einen (einseitigen) Begriffsdefinition zu beharren.
Gruß
jobo