Frage

Das unten scheint nicht zu funktionieren, wie ich es erwarten würde, wenn Ereignis $ _GET [ ‚friendID‘] = 55 ist die Rückkehr NULL

<?PHP

$_GET['friendid'] = 55;

$friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';

echo $friendid;
exit;

?>
War es hilfreich?

Lösung

Nehmen Sie die !. Sie wollen nicht, um den Ausdruck zu negieren.

$friendid = isset($_GET['friendid']) ? $_GET['friendid'] : 'empty';

Andere Tipps

Wie von PHP 7 Freilassung , können Sie den Null-Koaleszenz-Operator (Doppel "?") Verwenden hierfür:

$var = $array["key"] ?? "default-value";
// which is synonymous to:
$var = isset($array["key"]) ? $array["key"] : "default-value";

In PHP 5.3+, wenn alles, was Sie Überprüfung auf ein " truthy " Wert, können Sie den "Elvis Operator" verwenden (beachten Sie, dass dies nicht isset nicht überprüft).

$var = $value ?: "default-value";
// which is synonymous to:
$var = $value ? $value : "default-value";

Wenn Sie faul und riskant sind, können Sie Fehlersteueroperator @ und Kurzform von ternärer Operator .

$friendid = @$_GET['friendid']?: 'empty';

Zur Zeit sind Sie mit dem ternären Operator arbeiten:

$friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';

Break it zu einer if-else Aussage nach unten und es sieht wie folgt aus:

if(!isset($_GET['friendid']))
   $friendid = $_GET['friendid'];
else
   $friendid = 'empty';

Schauen Sie sich, was wirklich in der if Aussage passiert:

!isset($_GET['friendid'])

Beachten Sie das Ausrufezeichen (!) Vor der isset Funktion. Es ist eine andere Art zu sagen, „das Gegenteil von“. Was Sie hier tun Überprüfung, dass kein Wert bereits in $_GET['friendid'] gesetzt ist. Und wenn ja, $friendid sollte auf diesem Wert nehmen.

Aber wirklich, es würde brechen, da $_GET['friendid'] existiert nicht einmal. Und Sie können nicht den Wert von etwas nehmen, was nicht da ist.

es von Anfang nehmen, haben Sie einen Wert für $_GET['friendid'] gesetzt, so dass die erste if Zustand jetzt falsch ist und leitet sie an die else Option.

In diesem Fall stellen Sie den Wert des $friendid Variable empty.

Was Sie wollen, ist das Ausruf zu entfernen, und dann wird der Wert von $friendid auf dem Wert von $_GET['friendid'] zu nehmen, wenn es vorher festgelegt wurde.

Die beste Lösung für diese Frage, das heißt, wenn Sie auch brauchen, um ‚für die leere Zeichenkette zu prüfen‘, ist empty () .

$friendid = empty($_GET['friendid']) ? 'empty' : $_GET['friendid'];

empty () nicht nur überprüft, ob die Variable gesetzt ist, aber zusätzlich gibt false zurück, wenn es irgendetwas zugeführt wird, die ‚leer‘, wie eine leere Zeichenfolge, leeres Array, die ganze Zahl 0, boolean false betrachtet werden könnte, ...

Aus Ihrer Antwort an Philippe glaube ich Ihnen einen Blick auf die Unterschiede zwischen den isset .

Um es zusammenzufassen, isset() wird boolean TRUE zurück, wenn die Variable existiert. Wenn Sie also zu tun, sind

$fid = $_GET['friendid'] = "";
$exists = isset($fid);

$exists wird TRUE als $_GET['friendid'] existiert. Wenn dies nicht das, was Sie wollen, ich schlage vor, Sie in leer aussehen. Leere zurückkehren wird TRUE auf dem leeren String ( „“), das zu sein scheint, was man erwartet. Wenn Sie tun leer, Sie in der Dokumentation I verbunden sind, gibt es andere Fälle, in denen leer wird true zurück, wo Sie es nicht erwarten können, werden diese Fälle ausdrücklich auf den obigen Link dokumentiert.

wenn friendID ist nicht , friendID = friendID sonst friendID = leer

Okay, ich ein ähnliches Problem haben kann, die nicht mit dem vertraut zu sein! Situation als jasondavis hatte.

Art verwirrend, aber herauszufinden, nicht zu haben! wie in ... isset ($ avar) im Vergleich zu! isset ($ avar) ganz den Unterschied machen kann.

Also mit dem! an Ort und Stelle, ist ein JA als in

Angabe
    since $_GET['friendid'] = 55; has been initialized...
                                tell me 'no' - the opposite - that it hasn't and set it to empty.
              $friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';

    where not having the ! tells me yes it has something in it, leave it be.

               $friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';

war weit weniger verwirrend mit, wenn A $ = „“ dann .... es funktioniert. (Oder wenn $ A = "" für die von PHP).

Ich finde diese Verwendung von Strings und Variablen alle als Strings manchmal sehr entmutigend sein. Auch durch die Verwirrung, kann ich wirklich verstehen, warum ... nur macht die Dinge ein bisschen schwierig für mich zu erreichen.

Ich bin mit null Koaleszierstruktur Operator Operator in, wenn die Bedingung wie folgt

if($myArr['user'] ?? false){

Welche ist äquivalent zu

if(isset($myArr['user']) && $myArr['user']){
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top