Grüssi
warum so kompliziert, du hast auf jede variable der klasse zugriff, welche am beginn der klasse initalisiert wurde.
Genau das spricht aber gegen die Definition einer Klasse. Der Sinn einer Klasse besteht ja darin, die Daten (Instanzvariablen) zu kapseln, in einen zugriffsgeschützten Bereich, und ihre Manipulation nur über die Methoden ermöglicht! So kann ein wildes Datenmanipulieren ausgeschlossen werden.
Die Variablen sollten also immer private deklariert werden, so dass man von ausserhalb der Klasse keinen direkten Zugriff hat, sondern nur über die Methoden mit diesen Daten "kommuniziert". Global zugängliche Variablen untergraben das Klassen-Konzept (OOP), und somit könnte man auch gleich komplett auf die eine Klassenkonstruktion verzichten!
um deinen beispiel zu folgen wäre es dann einfach:
$a->username="neuerwert";
ja, weil ich (ehrlichgesagt) nicht weiss wie man in PHP private-Variablen deklariert ;-) In C++ ist jede Variable vonhausaus private, ausser man schreibt sie explizit in den public:-Block!
class <name> {
private:
char* username;
int irgendwas;
// weitere Variablen
public:
void checkServer();
// weitere Methoden
}
btw. in deinem anderen posting sagtest du man startet keine klasse, würde ich so nicht sagen, richtig sagt man man initalisiert sie mit "new" ohne ein fremdwort zu gebrauchen würd ich das starten nennen :)
Ich sagte ja auch, dass es etwas "vergleichbares" gibt. Aber es unterscheidet sich in der Funktionsweise doch erheblich mit dem was sich Draganis unter starten vorstellte ;-)
Bei einer Instanziierung eines neuen Objekts (mit new) wird normalerweise ein Konstruktor aufgerufen, eine Funktion die man überladen kann, indem man eine Methode definiert, die den gleichen Namen wie die klasse hat. Dort kannst du z.b. sagen dass $username gleich mit einem default-wert belegt werden sollte, zb "gast". Mit dem von der Programmiersprache zur Verfügung gestellten Default-Konstruktor wird die Variable nur angelegt. Durch überladen dieser Funktion kasst du deine Klasse schlichtweg benutzerdefinierter initialisieren.
Aber ich schätze mal das muss ich dir nicht sagen ;-)
lg bernhard