2010-08-19 14 views
13

Wenn Sie Werte in PHP zurückgeben, wird es als gute oder schlechte Methode angesehen, gemischte Datentypen zurückzugeben. Ich arbeite an einem Projekt, wo ich ständig mit Methoden konfrontiert werde, die eine ID-Nummer oder null zurückgeben. Ich handle den null Wert, indem ich nach null überprüfe und -1 zurückgebe, wenn es null ist.php Rückgabe gemischter Datentypen - gut oder schlecht

Eine andere Situation, in der ich mich oft befinde, ist, wo eine Methode etwas tun und eine Zeichenfolge zurückgeben soll. Manchmal ist es jedoch nicht möglich, die Zeichenfolge zurückzugeben, da sie nicht gefunden wurde oder eine Ausnahme aufgetreten ist. Was ist das Beste, was du hier machen kannst? Geben Sie eine Zeichenfolge wie "fehlgeschlagen" oder etwas zurück? Dies erzeugt dann eine String-Kopplung zwischen Methoden, denke ich, da die aufrufende Methode genau die String-Fehler-Nachricht kennen muss, um sie zu überprüfen.

EDIT: OK, es gibt schon ein paar verschiedene Meinungen. Ich mag die Idee, bei einem Fehler und dem tatsächlichen Ergebnis, unabhängig vom Datentyp, auf Erfolg zurückzukommen. Aber ... gibt es eine de facto Best Practice, wenn es darum geht? Ich meine, was machen Programmierer in anderen Sprachen, d. H. Java und C++ usw. in diesen Situationen?

Antwort

8

Was ich normalerweise tun, ist, wenn die Methode funktioniert, den Wert zurückgeben, und wenn es fehlgeschlagen ist, zurückgeben FALSE. Das ist es, was viele von PHP eingebaute Methoden tun. Also, dann können Sie einfach überprüfen, ob die Funktion FALSE zurückgegeben hat oder nicht.

+1

Ja, das macht Sinn, aber ich denke, das ist, wo ich denke, dass verschiedene Datentypen zurückgegeben werden. Das ist in vielen Sprachen nicht erlaubt - ist das gut oder schlecht? – david

+0

Gemischte Typen zurückgeben ist nicht schlecht. –

+0

PHP ist keine stark typisierte Sprache und Funktionen haben keinen expliziten Rückgabetyp wie andere Sprachen. –

4

Ich denke, es ist eine schlechte Praxis, gemischte Datentypen zurückzugeben. Es ist möglich, wie Sie bereits gesagt haben, aber denken Sie an die Lesbarkeit und Wartbarkeit Ihres Codes. Stellen Sie sicher, dass Sie kommentieren, was Sie zurückgeben und warum, ich denke, dass das am wichtigsten sein wird. Wenn Sie ein int erwarten und -1 anstelle von null zurückgeben, kommentieren Sie das, damit Sie (oder jemand anderes) nicht verrückt wird, um herauszufinden, was Sie zu tun versuchten.

+1

statt der Rückkehr -1 besser Ansatz wäre, falsch zurückzukehren ,. und ja, benutze Dokumentation. Zum Beispiel phpdoc um zu erwähnen, was die Funktion –

4

Null ist ein ziemlich häufiger Rückgabewert, der anzeigt, dass kein Rückgabewert vorhanden ist. Sie sollten null (nicht "fehlgeschlagen" oder -1) zurückgeben, wenn die Funktion überhaupt keine ID zurückgeben möchte.

Wenn es Ausnahme ist, dass eine ID nicht gefunden wurde, sollten Sie eine Ausnahme auslösen.

+2

+1 für die Erwähnung von Ausnahmen zurückgibt. Ich wünschte, der Kern würde sie mehr benutzen ... – ircmaxell

0

Eine Funktion, die gemischte Werte zurückgibt, wird nicht als schlecht angesehen. In der Tat ist dies die Schönheit von PHP, da es eine dynamische Sprache ist. Wenn also die Funktion korrekt ausgeführt wird, gibt false bei Fehler zurück .

if(false == ($data = do_something())) return false; 
else print_r($data); 
+4

Sie sollten '===', nicht '==' verwenden. '0 == false' ist wahr. –

+1

0 == false ist wahr, also ist null == false und '' == false und so weiter ,. mit === oder == hängt normalerweise von der Situation ab. –

2

Ich stimme den obigen Antworten zu.

Wenn Sie jedoch ein ganzes System entwerfen, würde die "beste Vorgehensweise" darin bestehen, Ausnahmen zu verwenden: Geben Sie immer etwas Sinnvolles zurück und werfen Sie im Falle einer Anomalie eine Ausnahme. Der Anrufer kann dann mit den Situationen fertig werden, die er kennt, und jemand kann den Rest überholen.

+1

Ja, aber Ausnahmen sollten nur für Ausnahmesituationen verwendet werden. Id ist nicht vorhanden usw. sollte wirklich durch einen korrekten Rückgabewert behandelt werden? Kommen Sie dann nicht dazu, Ausnahmen zu überfrachten und sie einfach für alles zu benutzen? – david

+2

Nun, als der Software-Architekt entscheiden Sie, wann Sie es verwenden. Ich denke, Ausnahme ist eine gute Möglichkeit, die Ausführung eines Teils des Codes zu schützen. Das Problem mit der Rückgabe von "falsch" ist, dass Sie nicht wissen, warum es zurückgegeben wird. Sie müssen also nur EINEN Fall eindeutig identifizieren, in dem falsch zurückgegeben werden kann (z. B. "Ende der Schleife"), oder Sie riskieren, verschiedene Fehler zu verwechseln. Also in Ihrer API schreiben Sie: returns: string im üblichen Fall, false am Ende der Schleife, wirf eine Ausnahme in anderen Fällen. – greg

+1

wollte nur +1, was @Greg sagte. Die Rückgabe von false (oder "false") ist ein Anti-Pattern, wenn Sie eine auf Ausnahmen basierende Programmierung durchführen. –

3

Wiederkehrende gemischte Art ist schlecht, mindestens heute in 2013. Boom! Der Weg zu gehen, ist dies zu spalten:

BAD, gemischten Rückgabetyp Stil:

function checkResult($data) 
{ 
    if ($data) { 
     ... 
     return $stuff; 
    } else { 
     return false; 
    } 
} 

Menschen zusätzliche Logik benötigen checkRsult() zu arbeiten, und sie wissen nie genau, welche Art zurück.

GOOD, eindeutig festgelegt Rückgabetyp Stil:

Vielleicht ist das Beispiel nicht wirklich gut, aber es zeigt den Weg zu gehen.

Verwandte Themen