ich versuchte, dies selbst zu tun und eine Lösung gefunden, scheint zu funktionieren.
Als Antwort auf die anderen, die versuchten, die Frage zu beantworten, indem sie dem Fragesteller sagten, eine andere Lösung zu verwenden, werde ich auch versuchen, den Grund für die Frage zu erklären. Weder das ursprüngliche Poster noch ich möchte eine Ausnahme verwenden, da es nicht darum geht, Ausnahmebehandlungsfunktionen zu verwenden und diese Belastung auf irgendeinen Code, in dem wir diese Klasse verwenden, zu legen. Der Punkt, zumindest für mich, war, dass ich dies nutzen konnte Klasse nahtlos in anderen PHP-Code, der in einem nicht-objektorientierten oder nicht-Exception-basierten Stil geschrieben werden kann. Viele eingebaute PHP-Funktionen sind so geschrieben, dass ein Ergebnis von false für nicht erfolgreiche Prozesse wünschenswert ist. Gleichzeitig möchten wir vielleicht in der Lage sein, dieses Objekt in unserem eigenen Code auf besondere Weise zu handhaben.
Zum Beispiel könnten wir wollen, wie etwas zu tun ist:
if (!($goodObject = ObjectFactory::getObject($objectType))) {
// if $objectType was not something ObjectFactory could handle, it
// might return a Special Case object such as FalseObject below
// (see Patterns of Enterprise Application Architecture)
// in order to indicate something went wrong.
// (Because it is easy to do it this way.)
//
// FalseObject could have methods for displaying error information.
}
Hier ist eine sehr einfache Implementierung.
class FalseObject {
public function __toString() {
// return an empty string that in PHP evaluates to false
return '';
}
}
$false = new FalseObject();
if ($false) {
print $false . ' is false.';
} else {
print $false . ' is true.';
}
print '<br />';
if (!$false) {
print $false . ' is really true.';
} else {
print $false . ' is really false.';
}
// I $ falsch bin Druck nur um sicher nichts zu machen unerwartetes geschieht.
Die Ausgabe lautet:
falsch ist. ist wirklich falsch.
ich dies habe getestet und es funktioniert auch, wenn Sie einige deklarierten Variablen innerhalb der Klasse haben, wie zum Beispiel:
class FalseException extends Exception {
final public function __toString() {
return '';
}
}
class CustomException extends FalseException { }
$false = new CustomException('Something went wrong.');
:
class FalseObject {
const flag = true;
public $message = 'a message';
public function __toString() {
return '';
}
}
Eine etwas interessante Umsetzung sein könnte
Unter Verwendung des gleichen Testcodes wie zuvor wird $ false zu false ausgewertet.
Okay, lassen Sie mich ein wenig klären, weil ich denke, in dem Versuch, die Frage zu vereinfachen, Menschen verstehen nicht das Herz davon. Also hier geht: Ich benutze Zend Framework, was bedeutet, dass ich oft Modelle (für diejenigen, die nicht wissen, dass sie im Wesentlichen eine schnelle Möglichkeit zum Einfügen/Aktualisieren/was auch immer mit einer Datenbank) verwenden. Ich rufe zum Beispiel häufig Users> insertNewUser() in einem meiner Controller auf.Wenn es erfolgreich ist, wird ein Zend_Db_Table_Rowset zurückgegeben. Nehmen wir an, dass der Benutzername bereits existiert. Ich möchte nicht einfach falsch zurückkehren, denn das wird mir nicht sagen, was falsch gelaufen ist. – Ethan
Ich liebe diese Frage, weil sie ein Dog-Objekt hat. Haben Sie das Implicit Cast Overloading probiert? –
Stattdessen habe ich ein Objekt namens modelResult erstellt, das den Grund dafür enthält, dass das Modell seine Funktion nicht ausführen konnte. Was ich will ist in der Lage zu sein, zurück in den Controller zu sagen, $ ergebnis = Benutzer-> insertNewUser(). if ($ result) {return $ result} sonst {(CHECK WHAT WITH FALSCH UND SAG WARUM)}. Ich weiß, dass ich dies tun könnte, indem ich den Typ von $ result überprüfe. Ich weiß, dass ich eine Menge Möglichkeiten habe, dies zu tun. Aber ich habe mich nur gefragt, ob ich mein ModelResult-Objekt false zurückgeben könnte, weil es einfach viel einfacher zu verwenden wäre. Gibt es eine Möglichkeit, dies zu tun? Wenn die Antwort nein ist, werde ich es schaffen. – Ethan