2 Stimmen

Halten Sie foreach((array)$foo as $bar) für einen Codegeruch?

Halten Sie dies für einen Codegeruch?

foreach((array)$foo as $bar)
{
    $bar->doStuff();
}

Sollte ich das stattdessen verwenden?

if (isset($foo) && is_array($foo))
{
    foreach($foo as $bar)
    {
        $bar->doStuff();
    }
}

Jede andere gute Praktiken zu decken, nicht setzen Variablen und behaupten, ein Array?

4voto

too much php Punkte 85034

Das sind beides Codegerüche. Beim zweiten geht es nur darum, alle Fehlermeldungen zu umgehen, so als würde man den Feueralarm ausschalten, bevor man die Küche in Brand setzt. Beides sagt Ihnen, dass Sie keine Ahnung haben, was in der Variablen steht. $foo oder ob es überhaupt im obigen Code definiert wurde. Sie müssen den Code noch einmal durchgehen und genau herausfinden, was mit $foo .

Wenn es mein Code wäre, würde $foo wahrscheinlich immer entweder als Array definiert werden, oder false, um anzuzeigen, dass das Array nicht benötigt wird:

if(do_we_need_an_array())
  $foo = function_returning_an_array();
else
  $foo = false;

[...snip...]

if($foo)
  foreach($foo as $f) { ... }

2voto

Willem Punkte 918

Wenn Sie testen, ob Variablen gesetzt sind, können Sie sie initialisieren:

if (! $foo or !is_array($foo))
    $foo = array();

foreach($foo as $bar)
{
    $bar->doStuff();
}

1voto

BobbyShaftoe Punkte 27949

Ich persönlich würde nie die erste Methode anwenden und mich immer für die zweite entscheiden.

1voto

Adam Bellaire Punkte 103525

Wenn $foo immer ein Array sein soll, dann wäre die zweite Form viel besser, wenn Sie eine Art von Behandlung für den Fehlerfall, z.B.:

if (isset($foo) && is_array($foo))
{
    foreach($foo as $bar)
    {
        $bar->doStuff();
    }
} 
else
{
    // This should not happen, exit angrily.
    exit("Oh crap, foo isn't an array!");
}

Natürlich müssen Sie die Anwendung nicht einfach beenden, aber tun Sie, was in diesem Fall angemessen ist, vielleicht eine Protokollierung oder eine andere Logik.

1voto

null Punkte 7142
(array)$foo != if (isset($foo) && is_array($foo))

En (array) cast kann nützlich sein, um Objekte in Arrays oder Skalare in Arrays zu casten, so dass Sie konsistente Schnittstellen zu Variablen erstellen können, die einzelne Werte oder Arrays enthalten können.

(array)$foo == array($foo)

Als definiert im PHP-Handbuch für Array-Typen.

Wenn Sie also immer ein Array verwenden müssen, dann wäre der erste von Ihnen vorgestellte Codeschnipsel die Antwort. Allerdings gelten die Regeln für das Type Casting immer noch, so dass Sie möglicherweise nicht das bekommen, was Sie wollen, also sehen Sie im Handbuch nach. Ansonsten würde die zweite Option den Zugriff auf nicht gesetzte Variablen verhindern, die keine Arrays sind.

Soweit ein Code riechen, würde ich sagen, dass die Überprüfung auf nicht gesetzte Variablen sicherlich vermieden werden kann, jedoch immer zu wissen, dass eine Variable ein Array haben wird, ist mehr als oft nicht, wird schleichen. Ich würde also versuchen, den Code in is_array($foo) if-then-Anweisungen auf ein Minimum zu beschränken.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X