Ich versuche PHP Objected Oriented Programmierung zu lernen, aber während des Video-Tutorials erhalte ich einen Fehler, während der Tutorial-Moderator nicht das gleiche Problem hat!PHP __toString() Funktioniert nicht richtig?
PHP-Code:
<?php
class Player {
public $score = 10;
public $name = "";
public function __construct($score,$name) {
$this->score = $score;
$this->name = $name;
}
public function __destruct() {
echo "Object With Name ".$this->name." has been destroyed";
}
public function __toString() {
echo "The Object with name ".$this->name." has been echoed</br>";
}
}
$newPlayer = new Player(50,"Ahmad");
echo $newPlayer;
?>
ich folgende Fehler bekommen:
The Object with name Ahmad has been echoed
Catchable fatal error: Method Player::__toString() must return a string value in D:\xampp\htdocs\php_oop\index.php on line 30
Wenn ich echo
-return
ändern bekomme ich folgende Ausgabe, die nicht passieren sollte, da ich nicht bin unsetting das Objekt. Warum sollte die __destruct()
Funktion aufgerufen werden, wenn echo
zu return
in toString()
geändert wird?
Der Fehler wird:
The Object with name Ahmad has been echoed
Object With Name Ahmad has been destroyed
Sie sollten 'return' anstelle von' echo' in Ihrer '__toString()' Methode verwenden. – Raptor
@Raptor: Ja genau, wenn ich 'return' benutze, dann wird das' __destruct() 'auch zu Echo gerufen ??? Bitte lesen Sie die Frage richtig. –
Es ist ein ** normales ** Verhalten, dass Destructor aufgerufen wird, da das Objekt bei der Ausführung des Skripts durch Garbage-Collection erfasst wird. – Raptor