Es gibt bereits viele Fragen nach PHP 7 Rückgabetyp Hinting und warum es nicht möglich ist, null zurückzugeben, wenn eine Klasse als Rückgabetyp definiert wurde. Wie dieser: Correct way to handle PHP 7 return types. Die Antworten sagen normalerweise, dass es kein Problem ist, als ob eine Funktion eine Klasse zurückgeben sollte, dann ist das Zurückgeben von null wahrscheinlich sowieso eine Ausnahme. Vielleicht habe ich etwas verpasst, aber ich verstehe nicht wirklich warum. Zum Beispiel wollen sie eine einfache Benutzerklasse sehen:PHP 7 Rückgabetyp Hinting
class User
{
private $username; // mandatory
private $password; // mandatory
private $realName; // optional
private $address; // optional
public function getUsername() : string {
return $this->username;
}
public function setUsername(string $username) {
$this->username = $username;
}
public function getPassword() : string {
return $this->password;
}
public function setPassword(string $password) {
$this->password = $password;
}
public function getRealName() : string {
return $this->realName;
}
public function setRealName(string $realName = null) {
$this->realName = $realName;
}
public function getAddress() : Address {
return $this->address;
}
public function setAddress(Address $address = null) {
$this->address = $address;
}
}
In unserer Anwendung ist es völlig legal einen Benutzer ohne realname und/oder ohne eine Adresse zu haben. Ich kann sogar die Felder realName und address auf null setzen - auch wenn die obige Lösung nicht optimal ist. Und auf unserer Profilseite möchte ich einen Hinweis anzeigen, wenn die Adresse null (leer) ist.
Aber das ist nur 1 Beispiel. Unsere Anwendung hat mehr als 100 Datenbanktabellen und entsprechende PHP-Klassen und fast alle von ihnen haben optionale Felder. Das Schreiben eines try-catch-Blocks, anstatt einfach null zu prüfen, um optionale Felder zu behandeln, scheint für mich ein wenig suboptimal zu sein.
Was ist eine gute Lösung für das obige Beispiel?
Sie könnten nur die Variablen leer Standardwerte initialisiert wird (wie Strings ‚‘ und Adresse zu einer Adresse Objekt mit leeren/ungültig/Standardwerten. Sie können auch Ihre Klassen verwenden könnten sie von einem Wrapper aufruf, die die Ausnahme abfangen würden, wenn Sie sind wieder eine null. – Nadir
ich glaube nicht, getAddress(). getCity === ‚‘ ist besser als einfach getAddress überprüfen() == null. Außerdem Check kann kompliziert sein. Wie zum Beispiel, wenn der zipcode optional dann kann ein neuer Entwickler einen Code schreiben:.. getAddress() getZip() === ‚‘ und er/sie denkt, dass die Adresse fehlt, aber nur die zipcode fehlt – Vmxes
In Ihrem Beispiel, was würden Sie die Telefonvorwahl der erwarten Verhalten zu sein, wenn es 'getRealName()' aufruft, wenn '$ this-> realName' null ist? Muss es den Wert prüfen und handhaben, wenn es null ist? Wenn ja: Ihre Klasse sollte das tun. Wenn Sie wirksam sind Wenn NULL-Strings für viele String-Operationen wie leere Strings behandelt werden, sollten Sie sie wahrscheinlich auf einen leeren String und nicht auf null setzen. Die meisten Situationen können so gelöst werden. Das heißt, ich denke, dass PHP in seiner Durchsetzung dies unangemessen rechtfertigt. –