it-swarm.com.de

Richtige Methode zum Deklarieren mehrerer Variablen in PHP

Ich programmiere 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 möchte dies auf die richtige Art und Weise tun.

Der einzige Grund, warum ich die Fehleranzeige ausschalte, ist, dass ich dank Isset () nicht jeden einzelnen var vor der Verwendung testen muss.

Hier ist meine Frage:

Gibt es eine bessere Möglichkeit, mehrere Vars 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;
?>
45
Tom Biakryek
<?php
  $foo = $bar = $ping = $pong = '';
?>

Wenn es Ihr Skript ist und Sie wissen, welche Variablen Sie verwenden, warum sollten Sie Ressourcen verwenden, um zu überprüfen, ob die Variable zuvor deklariert wurde?

77
DaneSoul

Ich habe dies früher in einem Kommentar gepostet, aber jemand schlug vor, es als Antwort zu übermitteln.

Der kürzeste und einfachste Weg, den ich mir vorstellen kann, ist: 

$foo = $bar = $ping = $pong = '';

Ich ziehe es vor, Dinge lieber auf false als auf einen leeren String zu setzen, so dass Sie in der Zukunft mit === false immer prüfen können. Dies ist jedoch nur eine Präferenz und hängt davon ab, wie Sie diese Variablen verwenden.

11

Ihr if() mit isset() ist der richtige Weg, dies zu tun!

Sie können es jedoch mit dem Ternary Operator etwas kürzer/lesbarer schreiben:

$foo = isset($foo) ? $foo : '';

Der erste $foo wird auf den Wert nach dem ? gesetzt, wenn die Bedingung nach dem = wahr ist. Andernfalls wird er auf den Wert nach dem : gesetzt. Die Bedingung (zwischen = und ?) wird immer als boolean umgewandelt. 

Seit PHP 5.3 sie können es noch kürzer schreiben:

$foo = isset($foo) ?: '';

Dies setzt $foo auf TRUE oder FALSE (abhängig davon, was isset() zurückgibt), wie von @Decent Dabbler in den Kommentaren angegeben. Durch das Entfernen von isset() wird es auf '' gesetzt, es wird jedoch auch eine undefinierte Variablenbenachrichtigung ausgegeben (allerdings nicht in der Produktion).

Seit PHP 7 können Sie einen Null-Koaleszenz-Operator verwenden:

$foo = $foo ?? '';

Dies gibt keinen Fehler aus, aber es wird als TRUE ausgewertet, wenn $foo existiert und leer ist, im Gegensatz zum ternären Kurzschriftoperator, der als FALSE ausgewertet wird, wenn die Variable leer ist.

8
powtac

Ein etwas runder Weg, dies zu tun, ist, wenn Sie den Namen Ihrer Variablen in ein Array schreiben und sie dann mit einem Ternären Operator in einer Schleife ausführen, ähnlich wie bei powtac.

$vars = array('foo', 'bar', 'ping', 'pong');
$defaultVar = '';

foreach($vars as $var)
{
    $$var = isset($$var) ? $$var : $defaultVar;
}

Wie in anderen Antworten erwähnt, können Sie mit PHP den obigen Code seit Version 5.3 wie folgt schreiben:

$vars = array('foo', 'bar', 'ping', 'pong');
$defaultVar = '';

foreach($vars as $var)
{
    $$var = isset($$var) ?: $defaultVar;
}

Beachten Sie den geänderten ternären Operator.

5
Connor Deckers

Warum nicht einfach einstellen?

<?php
$foo = '';
$bar = '';
//etc
?>

Wenn Sie versuchen, den Wert in ihnen zu erhalten, ist dies im Allgemeinen der richtige Weg. Beachten Sie, dass Sie in Ihren Anweisungen kein zweites Paar Klammern benötigen:

if (!isset($foo)) $foo = '';

ist genug.

0
jli

Um das Problem zu beheben 

  <?php
  $foo = $bar = $ping = $pong = '';
  ?>

werfen 

Hinweis: Undefinierte Variable: ...

  <?php
  @$foo = $bar = $ping = $pong = '';
  ?>

Das Problem wird nicht behoben, aber es wird nicht angezeigt und das Parsen des Skripts wird nicht angehalten.

0
c0d3x1337