2009-05-05 6 views
1

Ich habe gerade einige Änderungen an einem WordPress-Blog vorgenommen und festgestellt, dass sie parse_str (http://php.net/parse_str) zum Parsen verwenden und ihre optionalen Parameter auf eine Funktion einstellen.Gibt es einen Vorteil parse_str für optionale Funktionsparameter im Vergleich zu einem Array?

Ich frage mich, ob es einen Vorteil gegenüber dem Senden eines Arrays ist?

Beispiele:

Mit Array:

$blahOptions = array(
    'option_1' => true, 
); 
BlahArray($blahOptions); 
function BlahArray($options = array()) { 
    $defaults = array(
     'option_1' => false, 
     'option_2' => 'blah', 
    ); 
    // this would probably be in a function to be used everywhere 
    foreach ($defaults as $defaultOption => $defaultValue) { 
     if (!isset($options[$defaultOption])) $options[$defaultOption] = $defaultValue; 
    } 
} 

Mit parse_str:

$blahOptions = 'option_1=1'; 
BlahString($blahOptions); 
function BlahString($options = '') { 
    $defaults = array(
     'option_1' => false, 
     'option_2' => 'blah', 
    ); 
    parse_str($options, $defaults); 
    $options = $defaults; 
} 
+0

Nur eine Randnotiz, warum nicht Array_merge anstelle der Foreach verwenden? $ options = array_merge ($ defaults, $ options); – Ickmund

+0

Im obigen Beispiel würde array_merge funktionieren, aber array_merge und array_merge_recursive machen funky Dinge mit verschachtelten Arrays und numerischen Schlüsseln. array_merge: Mit numerischen Schlüsseln werden die Schlüssel nicht ersetzt, sondern die Schlüssel hinzugefügt und neu angeordnet. array_merge_recursive: Es werden verschachtelte Arrays zusammengeführt, die beim Senden von Optionen an eine Funktion meistens nicht erwünscht sind. Es macht auch die gleichen Dinge mit numerischen Tasten wie array_merge. –

Antwort

6

Nein. Das scheint eine lächerliche Möglichkeit zu sein, funktionale Parameterargumente zu übergeben. Ich könnte es verstehen, wenn Sie $ _GET oder $ _POST Variablen oder etwas in diesen Linien, aber für Parameter zu einer Funktion neu erstellen müssten? Das ist Code-Geruch genau dort.

Sie sollten ein Array verwenden und dann stattdessen extract() verwenden. Ich habe vorher mit Wordpress gearbeitet und mein Rat ist, den Code auf Distanz zu halten. Es ist kein Beispiel für Modellprogrammierung.

+0

Ich kann den Vorteil sehen, GET und POST direkt zu übergeben, aber das wäre ziemlich gruselig. –

2

No. Es gibt mehr Nachteile als Vorteile.

Wenn Sie eine einzelne Zeichenfolge verwenden, können Sie nur Zeichenfolgenwerte übergeben. Mit einem Array können Sie jeden PHP-Datentyp verwenden und der Werttyp jedes Elements ist unabhängig voneinander.

+0

Sie können immer noch Arrays übergeben, verwenden Sie einfach das Format: name [key1] = val & name [key2] = val Aber sonst wären Dinge wie Ressourcen unmöglich. –

+0

Sie können jedoch nicht zwischen Datentypen unterscheiden, es sei denn, Sie verwenden ein spezielles Format. – Gumbo

1

Mit parse_str können Sie möglicherweise die Abfragezeichenfolge von der URL ablegen, und die Funktion wird funktionieren. Wenn Sie ein Array verwenden und die Abfragezeichenfolge verwenden möchten, müssen Sie vor dem Aufruf der Funktion alles in einem Array aufzählen.

Ich bin nicht ganz davon überzeugt, es ist der beste Weg zu gehen, aber ich sehe, wie es ein bisschen Flexibilität hinzufügen kann.

Verwandte Themen