Zitat:
Zitat von ct2oo4
Dennoch verstehe ich nicht warum ich meine klasseninternen Variablen $subject und $text nicht in dieser Form verwenden kann - sondern nur mittels $this->subject bzw. $this->text!???
|
Damit PHP nicht mit Klassen- und Methodenvariablen durcheinander kommt.
In Java ist es prinzipiell kein Problem, in PHP muss man allerdings hierbei strikt unterscheiden. Dafür darf man ansonsten eh schlampen wie man will xD
Zitat:
Wenn ich print $email schreibe wird nur "Object" ausgegeben. Wie bekomme ich den Return "ausgegeben"?
|
Tja, das liegt ganz klar auf der Hand
Ein Konstruktor liefert
NIE einen Wert zurück! Er dient lediglich dazu ein Objekt (in diesem Fall die Klasse Email) zu instanziieren! Hier schlägt auch wieder die schlampige Syntax von PHP zurück, da es keine strikte Trennung der Datentypen gibt!
Vergleich zu Java:
Code:
// "Normale" Methode die einen String zurückgibt
// Syntax: Sichtbarkeit - Typ des Rückgabewerts - Methodenname
public String methode() {
return new String();
}
// Konstruktor
// Syntax: Sichtbarkeit - Methodenname
public Klassenname() {}
Nein! Es ist nur
=== zulässig. Du müsstest schreiben:
PHP-Code:
if ( !($this->subject === '') && !($this->text === '') )
Ich würde dir allerdings diese Syntax nahelegen:
PHP-Code:
if ( !empty($this->subject) && !empty($this->text) )
Zitat:
Wie bekomme ich den Return "ausgegeben"?
|
Mal sicher nicht über den Konstruktor wie wir ja jetzt wissen
Es ist allerdings erschreckend dass du innerhalb der Klasse auf diesselbe Klasse statisch zugreifen möchtest ... oÔ ( Email::_sendEmail() )
Probier doch mal das:
PHP-Code:
if ($send) {
$email = new Email($_POST['subject'], $_POST['text']);
$email->_sendEmail();
}
Und schmeiß endlich
PHP-Code:
return Email::_sendEmail();
aus dem Konstruktor ^^'
Hoffe ich konnte dir OOP hiermit etwas näher bringen. Viel Spaß noch beim Programmieren