Der richtige Weg, um mehrere Variablen in PHP zu deklarieren
Lesezeit: 6 Minuten
Tom Biakryek
Ich codiere seit Jahren persönliche Skripte in PHP und gewöhne mich daran, die Fehleranzeige auszuschalten. Ich bin dabei, einige dieser Skripte zu veröffentlichen und würde es gerne richtig machen.
Der einzige Grund, warum ich die Fehleranzeige abschalte, ist, dass ich dank isset() nicht jede einzelne Variable testen muss, bevor ich sie verwende.
Hier also meine Frage:
Gibt es eine bessere Möglichkeit, mehrere Variablen als diese zu deklarieren?
<?php
// at the begining of my main file
if (!isset($foo)) ($foo = '');
if (!isset($bar)) ($bar="");
if (!isset($ping)) ($ping = '');
if (!isset($pong)) ($pong = '');
// etc. for every single var
?>
So etwas zum Beispiel:
<?php
var $foo, $bar, $ping, $pong;
?>
Erwartet var $foo eine leere Zeichenfolge zu sein, scheint seltsam. Welche Operationen führen Sie später durch, die Probleme verursachen?
– Mike B
14. Juni 2012 um 0:35 Uhr
Ich verstehe nicht ganz, worum es geht. Sie testen eine Variable, bevor Sie sie setzen, um zu prüfen, ob Sie sie setzen können? Kommen Sie aus einer anderen Sprache, in der Sie Variablen wie setzen müssen dim d as Integer? Ich denke, was Sie wirklich brauchen, ist eine Kapselung wie Funktionen, Klassen usw., damit Sie den globalen Namensraum verlassen und sich dann angewöhnen, Variablen am Kopf jeder Funktion/Klassenmethode zu deklarieren.
– Jared Farrish
14. Juni 2012 um 0:35 Uhr
@MikeB: ein einfacher Test. Wenn die var nicht an erster Stelle deklariert ist, wird eine einfache if ($foo == 'blabla') wird einen Fehler auslösen.
– Tom Biakryek
14. Juni 2012 um 0:44 Uhr
Woher kommen dann die Variablen? Benutzt du sowas wie extract($_GET) Variablen zu erstellen und Sie wissen nicht genau, was erstellt wurde?
– Mike B
14. Juni 2012 um 0:45 Uhr
Was sagt dieser Fehler? Ist es eine Warnung?
– Jared Farrish
14. Juni 2012 um 0:47 Uhr
DaneSoul
<?php
$foo = $bar = $ping = $pong = '';
?>
Wenn es Ihr Skript ist und Sie wissen, welche Variablen Sie verwenden, warum möchten Sie Rekurse ausgeben, um zu überprüfen, ob die Variable zuvor deklariert wurde?
Wenn Sie sie aus irgendeinem Grund nur “deklarieren” möchten, können Sie sie alle mit in eine Zeile stellen ;wie in $foo; $bar; $far; $boo;, alles in einer Zeile. Hinweis für Uneingeweihte, $foo, $bar, $far, $boo; löst einen (Parse-)Syntaxfehler aus und beendet das Skript.
Werden sich dadurch nicht alle Werte ändern, wenn Sie nur den Wert einer Variablen ändern?
– Molar
13. Juli 2018 um 9:31 Uhr
molerat, NEIN, nachdem die Variablen deklariert wurden, können Sie sie separat ändern und jede behält ihren eigenen Wert.
– DaneSoul
14. Juli 2018 um 17:18 Uhr
@molerat du programmierst auch in python, oder?? Ich habe gerade angefangen, in Python zu programmieren und auf die harte Tour herausgefunden, dass das Ändern eines in der Kette alle anderen ändert. Eigentlich, warte, es war nicht Python. es war eine andere Sprache
– alter Junge
11. November 2018 um 23:00 Uhr
TaschevollKäse
Ich habe dies zuvor in einem Kommentar gepostet, aber jemand hat vorgeschlagen, dass ich es als Antwort einreiche.
Der kürzeste und einfachste Weg, den ich mir vorstellen kann, ist:
$foo = $bar = $ping = $pong = '';
Ich ziehe es oft vor, die Dinge auf false anstatt auf einen leeren String zu setzen, damit Sie in Zukunft immer Prüfungen mit === false durchführen können, aber das ist nur eine Einstellung und hängt davon ab, wie und wofür Sie diese Variablen verwenden.
powtac
Dein if() mit isset() Versuch ist der richtige Weg, das zu tun!
Aber Sie können es etwas kürzer/lesbarer schreiben, indem Sie die verwenden Ternärer Operator:
$foo = isset($foo) ? $foo : '';
Der Erste $foo wird auf den Wert nach gesetzt ? wenn der Zustand nach dem = wahr ist, sonst wird es auf den Wert nach gesetzt :. Der Zustand (zwischen = und ? ) wird immer als boolean gecastet.
Seit PHP 5.3 du kannst es auch kürzer schreiben:
$foo = isset($foo) ?: '';
Dies wird eingestellt $foo zu TRUE oder FALSE (je nachdem was isset() Returns), wie von @Decent Dabbler in den Kommentaren gezeigt. Entfernen isset() werde es einstellen '' aber es wird auch eine undefinierte Variablenmeldung auslösen (allerdings nicht in der Produktion).
Seit PHP 7 können Sie einen Null-Coalesce-Operator verwenden:
$foo = $foo ?? '';
Dies wird keinen Fehler auslösen, aber es wird als ausgewertet TRUE wenn $foo existiert und ist leer, im Gegensatz zum abgekürzten ternären Operator, der als ausgewertet wird FALSE wenn die Variable leer ist.
Ehrliche Frage, warum sollte man das haben wollen $foo eine leere Zeichenfolge vs null sein? Ich drehe mich im Kreis und versuche, mir einen Umstand auszudenken
– Mike B
14. Juni 2012 um 0:38 Uhr
Ich bin mir sicher, dass der Fragesteller einfach einen Standardwert festlegen möchte, in diesem Fall eine leere Zeichenfolge. Und denken Sie daran ” != NULL oder nicht gesetzt 😉
– powtac
14. Juni 2012 um 0:39 Uhr
Ich weiß nicht, ich bin bei @MikeB, ich bin seit acht Jahren ein PHP-Entwickler, der sich erholt, und ich habe so etwas noch nie systematisch gemacht, oder hatte ich ein Problem, es nicht zu tun?
– Jared Farrish
14. Juni 2012 um 0:41 Uhr
$foo = isset($foo) ?: ''; wird nicht das tun, was Sie denken, dass es tun wird. Wenn $foo eingestellt ist, wird es zugewiesen true zu $foo Egal ob $fooDer Anfangswert von .
– Anständiger Dabbler
14. Juni 2012 um 4:17 Uhr
Connor Decker
Ein etwas umständlicher Weg, dies zu tun, besteht darin, den Namen Ihrer Variablen in ein Array zu schreiben und sie dann mit einem ternären Operator zu durchlaufen, ähnlich wie powtac‘s Antwort.
Wenn Sie versuchen, den Wert in ihnen zu bewahren, dann ja, das ist im Allgemeinen der richtige Weg. Beachten Sie, dass Sie das zweite Klammerpaar in Ihren Anweisungen nicht benötigen:
if (!isset($foo)) $foo = '';
reicht.
c0d3x1337
Um das Problem zu beheben
<?php
$foo = $bar = $ping = $pong = '';
?>
werfen
Hinweis: Undefinierte Variable: …
<?php
@$foo = $bar = $ping = $pong = '';
?>
Es wird es nicht beheben, aber es wird nicht angezeigt und das Skript wird nicht vom Parsen abgehalten.
Fehler/Hinweise/Warnungen zu unterdrücken ist nicht dasselbe wie sie zu beheben, und diese Praxis sollte vermieden werden.
– TreyBake
21. Juni 2019 um 15:34 Uhr
13354200cookie-checkDer richtige Weg, um mehrere Variablen in PHP zu deklarierenyes
Erwartet
var $foo
eine leere Zeichenfolge zu sein, scheint seltsam. Welche Operationen führen Sie später durch, die Probleme verursachen?– Mike B
14. Juni 2012 um 0:35 Uhr
Ich verstehe nicht ganz, worum es geht. Sie testen eine Variable, bevor Sie sie setzen, um zu prüfen, ob Sie sie setzen können? Kommen Sie aus einer anderen Sprache, in der Sie Variablen wie setzen müssen
dim d as Integer
? Ich denke, was Sie wirklich brauchen, ist eine Kapselung wie Funktionen, Klassen usw., damit Sie den globalen Namensraum verlassen und sich dann angewöhnen, Variablen am Kopf jeder Funktion/Klassenmethode zu deklarieren.– Jared Farrish
14. Juni 2012 um 0:35 Uhr
@MikeB: ein einfacher Test. Wenn die var nicht an erster Stelle deklariert ist, wird eine einfache
if ($foo == 'blabla')
wird einen Fehler auslösen.– Tom Biakryek
14. Juni 2012 um 0:44 Uhr
Woher kommen dann die Variablen? Benutzt du sowas wie
extract($_GET)
Variablen zu erstellen und Sie wissen nicht genau, was erstellt wurde?– Mike B
14. Juni 2012 um 0:45 Uhr
Was sagt dieser Fehler? Ist es eine Warnung?
– Jared Farrish
14. Juni 2012 um 0:47 Uhr