Was ist der beste Weg zum umwandeln einer Variablen in einen boolean in php?
Las ich diese Frage und sah diese Zeile:
if ($a == $b) { return true } else { return false }
Und es führte mich zu Fragen, was ist der beste Weg, um Darsteller eine variable mit unbekanntem Typ (string, könnte int; wer weiß? who cares?) um ein boolean?
Natürlich if ($var) { return true; } else { return false; }
würde den trick tun, aber ich denke return $var ? true : false;
ist wahrscheinlich besser.
:
return $var && true
return $var || false
return !empty($var)
sind alle wahrscheinlich besser, aber es ist ein besten Weg zu werfen, um bool? Noch wichtiger ist, was macht es am besten?
Bearbeiten, um zu klären:
Diese war nicht mit der Absicht geschrieben, eine umfassende Liste der Möglichkeiten zu werfen, um einen booleschen Wert. Meine Frage ist speziell auf die explizite Umwandlung. Bevor ich gelernt, über empty
ich verwendet isset($var) && $var
da es verhindern würde, dass der Fehler auch geworfen wird, auf nicht deklarierte Variablen. Jetzt benutze ich !empty($var)
weil es schneller zu Tippen.
!empty
hat die (dis -) Vorteil, nicht werfen alle E_NOTICE
Fehler, wenn die variable nicht definiert ist. Diese konnte als gut bezeichnet werden, wenn Sie die Prüfung $_GET
oder $_SESSION
Variablen, für die Mehrheit der anderen Variablen, nehme ich an, kann man es als schlimm, wie es sich verstecken wollte Fragen, wo eine variable nicht initialisiert ist, wo es hätte sein sollen, initialisiert.
War ich neugierig, ob andere Entwickler haben einen anderen Weg, Dinge zu tun, die ich nicht hatte
bekannt über.
InformationsquelleAutor der Frage zzzzBov | 2011-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese zwei Wege sind:
Expliziten cast:
Dies ist, wenn Sie explizit casten der Variablen mit dem literal-cast-operator
(bool)
.Impliziten cast (mit Operatoren):
Dies ist, wo der Typ ist abgeleitet von dem Ausdruck. In PHP, diese beinhaltet logische Operatoren und Vergleichsoperatorenund jede Funktion/Sprache konstruieren, die erwartet, dass ein boolescher wie
if
undwhile
:oder
oder
oder
oder
Alle Methoden fallen in eine dieser zwei Kategorien.
Mein Vorschlag ist, dass, wenn Sie alle Operatoren (
==
!=
>
etc), nicht die Mühe casting. Aber wenn Sie einfach wieder eine variable, dann warf explizit...InformationsquelleAutor der Antwort ircmaxell
Ich persönlich benutze immer
Ich denke, das werden die meisten klaren Art und Weise zu wirken, um einen booleschen Wert. Die meisten Menschen kommen aus einer anderen Sprache verstehen. Eine andere haben Sie vergessen, aus Ihr ist
Finde ich, dass man ein wenig schwer zu Lesen.
InformationsquelleAutor der Antwort Logan Bailey
Was ich gesehen habe meist in JavaScript: Doppelte negation
Erklärung:
!$var
wertet$var
seiner gegenüber booleschen Wert (wenn$var
ist nicht ein boolescher Wert, es ist Konvertierung in boolean first (Typ-Konvertierung)) und die zweite!
kehrt sich dieser Wert wieder, was zu dem booleschen Wert,$var
würde zu bewerten.Ist es am besten? Das hängt davon ab, die Ihren Kriterien entsprechen. Wie bereits erwähnt, könnte es schwieriger sein, zu verstehen, (obwohl es nichts besonderes ist), aber es ist definitiv die kürzeste version 😉
Es könnte auch davon abhängen, welche Werte Sie überlegen, wie
true
undfalse
. Diese Werte beurteilen zufalse
standardmäßig:Update:
Ich denke im Allgemeinen kann man sagen, dass jeder code, der vermeidet ausdrücklich die Rückkehr
true
oderfalse
ist besser. Sei es durch die explizite Umwandlung oder implizite Typ-Umwandlung. Natürlich explizite (per definition) sollte leichter zu verstehen.Dass code wie
return $a ? true : false
redundant ist. Vor allemwas konnte nur so geschrieben werden, als
return ($a == $b)
.Muss es einen Grund, warum diese verpönt war in meiner Studenten ;).
Update2:
Würde ich vermeiden, solche Ausdrücke als
return $var && true
. In PHP würde es wieder einen booleschen Wert, aber z.B. in JavaScript oder Python, würde es wieder den Wert von$var
wenn es zu true ausgewertet wird. Und in diesen Sprachen ist dieser "trick" ist, mit der Absicht benutzt, um bestimmte Effekte zu erhalten. Also für Leute (mehr) vertraut mit diesen Sprachen, es ist vielleicht nicht offensichtlich sein (ohne Dokumentation oder Kontext), dass nur ein boolean zurückgegeben werden soll.InformationsquelleAutor der Antwort Felix Kling
InformationsquelleAutor der Antwort zerkms
Können Sie Darsteller:
http://php.net/manual/en/language.types.type-juggling.php
Hinweis, in PHP, da 0 == false ist, müssen Sie verwenden die === Komparator zu bekommen geben Vergleich, plus-Wert-Vergleich.
http://php.net/manual/en/language.operators.comparison.php
InformationsquelleAutor der Antwort Jared Farrish