if($display = login($user)) .... Rückgabewert einer Funktion
Dred
- php
0 dedlfix
0 Der Martin
0 Dred3 Sven Rautenberg
0 jobo0 Dred
Hallo,
ganz kurze Frage.
die Funktion login() gibt einen boolschen Wert zurück, ob der Login gelungen ist. Dieser soll auf die Variable $display geschrieben werden, allerdings die Verneinung des boolschen Wertes. Andererseits wird mit dem if der Gesamtausdruck getestet, der sich auf das Ergebnis von login() beziehen soll.
if(!$display = login($user))
im Fehlerfall von login, wird $display zwar true, allerdings wird der ganze if() Ausdruck auch true. Der sollte aber false bleiben.
Wie kriege ich das hin?
Grüße
Hi!
if(!$display = login($user))
im Fehlerfall von login, wird $display zwar true, allerdings wird der ganze if() Ausdruck auch true. Der sollte aber false bleiben.
Wie kriege ich das hin?
Getrennt bekommst du das sicher hin. Und wenn du es dann doch in einen Zeile bringen willst, dann klammere die vorher getrennten Ausdrücke.
Lo!
Hi,
die Funktion login() gibt einen boolschen Wert zurück, ob der Login gelungen ist. Dieser soll auf die Variable $display geschrieben werden, allerdings die Verneinung des boolschen Wertes. Andererseits wird mit dem if der Gesamtausdruck getestet, der sich auf das Ergebnis von login() beziehen soll.
kein Problem. ;-)
Da war doch mal was mit der doppelten Verneinung ...
if(!$display = login($user))
im Fehlerfall von login, wird $display zwar true, allerdings wird der ganze if() Ausdruck auch true. Der sollte aber false bleiben.
Wie kriege ich das hin?
Doppelt negieren und richtig klammern:
if ( !($display = !login()) )
So wird der einmal negierte Wert zugewiesen, aber der zweimal negierte Wert als if-Ausdruck ausgewertet.
So long,
Martin
Thanks, für die kleine Denksportlösung am Mittag!
Moin!
Doppelt negieren und richtig klammern:
if ( !($display = !login()) )
Code wird in der Regel nur einmal geschrieben, aber danach sehr häufig von Programmierern gelesen.
Ich halte absolut nichts davon, eine hohe Kreativität beim Herstellen des Codes zu beweisen, wenn er dadurch unoffensichtlicher und unleserlicher wird. Das passiert insbesondere, wenn man zuviel in eine Codezeile packen will.
Dieser Code ist hinsichtlich des "zuviel in einer Zeile" deutlich besser:
$display = !login();
if (! $display)
Und dann noch die doppelte Verneinung: Ganz blöd! Und der einzige Grund ist der mangelhafte Variablenname, dem man "Anzeigen? Ja!" aufgedrängt hat, und wenn das Login erfolgreich passiert, will man keine Anzeige.
Umbenennung der Variablen enthebt uns von dem beständigen "nicht-nicht-nicht":
$hide = login();
if ($hide)
Und schon ist der Code offensichtlicher und leichter zu lesen und zu verstehen. Keine der Änderungen ist funktional notwendig - aber genau darum geht es ja.
- Sven Rautenberg
Hallo,
Doppelt negieren und richtig klammern:
if ( !($display = !login()) )
Code wird in der Regel nur einmal geschrieben, aber danach sehr häufig von Programmierern gelesen.
während der "Evolution" des Codes wird er in der Regel häufig umgeschrieben, wenn er einmal ein gewisses Reifestadium erreicht hat, stimme ich dir zu.
Ich halte absolut nichts davon, eine hohe Kreativität beim Herstellen des Codes zu beweisen, wenn er dadurch unoffensichtlicher und unleserlicher wird.
Ich auch nicht - wohl aber dann, wenn er kompakter wird, ohne an Klarheit zu verlieren. Zumal kompakter Code häufig Hand in Hand mit mehr Klarheit geht. Meiner Ansicht nach (damit meine ich nicht die Formatierung des Quelltextes).
Das passiert insbesondere, wenn man zuviel in eine Codezeile packen will.
Aber auch dann, wenn man *einen* logischen Schritt auf zwei oder mehr Zeilen splittet. Einen Schritt zu zerreißen, verbessert nicht die Verständlichkeit, sondern verschlechtert sie.
Dieser Code ist hinsichtlich des "zuviel in einer Zeile" deutlich besser:
$display = !login();
if (! $display)
Ich sehe in diesem Beispiel weder einen Vorteil, noch einen Nachteil für deine Fassung.
> Und dann noch die doppelte Verneinung: Ganz blöd! Und der einzige Grund ist der mangelhafte Variablenname, dem man "Anzeigen? Ja!" aufgedrängt hat, und wenn das Login erfolgreich passiert, will man keine Anzeige.
Das ist mir nach dem Absenden meines Beitrags auch aufgefallen: Bessere Semantik hätte hier von Anfang an mehr Klarheit bringen können.
> Umbenennung der Variablen enthebt uns von dem beständigen "nicht-nicht-nicht":
>
> ~~~php
$hide = login();
> if ($hide)
Einverstanden - und ich würde trotzdem noch die Zuweisung in die Klammer des if-Statements setzen (wir sprachen neulich darüber), weil das für mich *ein* zusammenhängender logischer Schritt ist: Merken und Bewerten.
So long,
Martin
Hi,
$hide = login();
if ($hide)
>
> Einverstanden - und ich würde trotzdem noch die Zuweisung in die Klammer des if-Statements setzen (wir sprachen [neulich](https://forum.selfhtml.org/?t=205873&m=1397144) darüber), weil das für mich \*ein\* zusammenhängender logischer Schritt ist: Merken und Bewerten.
Vielleicht kann „merken“ auch ganz entfallen - wenn es nur diese eine Entscheidung ist, die vom Ergebnis von login() abhängig gemacht werden soll.
MfG ChrisB
--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
Hallo,
Hi,
$hide = login();
if ($hide)
> >
> > Einverstanden - und ich würde trotzdem noch die Zuweisung in die Klammer des if-Statements setzen (wir sprachen [neulich](https://forum.selfhtml.org/?t=205873&m=1397144) darüber), weil das für mich \*ein\* zusammenhängender logischer Schritt ist: Merken und Bewerten.
>
> Vielleicht kann „merken“ auch ganz entfallen - wenn es nur diese eine Entscheidung ist, die vom Ergebnis von login() abhängig gemacht werden soll.
eigentlich müsste es heißen:
~~~php
if ( loggedIn($user) ) {
show();
} else {
hide();
}
Es frägt sich ja auch, was man ins if und was ins else packen möchte. Macht es denn Sinn, diesen Wert in einer extra Variablen zu speichern? Selbst wenn im selben Script (warum?) die Abfrage noch einmal vorkäme?
Gruß
jobo
Hallo,
<?php
function retBool($param) {
return (bool) $param;
}
var_dump(retBool(true));
var_dump(retBool(false));
var_dump($boolVar = retBool(true));
var_dump($boolVar = retBool(false));
if(! ($boolVar = retBool(true)) ) {
echo "es ist nicht wahr";
} else {
echo "es ist wahr";
}
echo "\n";
if(! ($boolVar = retBool(false)) ) {
echo "es ist nicht wahr";
} else {
echo "es ist wahr";
}
Ergibt:
bool(true)
bool(false)
bool(true)
bool(false)
es ist wahr
es ist nicht wahr
Gruß
jobo
if(! ($boolVar = retBool(true)) ) {
echo "es ist nicht wahr";
} else {
echo "es ist wahr";
}
echo "\n";
if(! ($boolVar = retBool(false)) ) {
echo "es ist nicht wahr";
} else {
echo "es ist wahr";
}[/code]Ergibt:
bool(true)
bool(false)
bool(true)
bool(false)
es ist wahr
es ist nicht wahr
Ja, aber tut nicht, was ich will, da $boolVar immer den gleichen Zustand wie retBool hat.