2010-12-15 8 views
1

Ich arbeite mit PHP-Code in meinem Job, und einiges davon ist ziemlich schlecht. Da ich auf eine Datei arbeitete, sah ich dies:Zitate in PHP-Array-Schlüssel

$array["$rowID"]['value'] = $value 

Gibt es einen Grund, dass $rowID sollte in doppelte Anführungszeichen gewickelt werden?

Die folgende funktioniert offensichtlich gut:

$array[$rowID]['value'] = $value 

Ist das nur persönliche Präferenz, oder gibt es einen Grund, warum der Schlüssel in doppelten Anführungszeichen ist?

+0

Danke Jungs werden. Ich nahm an, dass es keinen Grund gab, die Variable doppelt anzugeben. Ich habe versucht herauszufinden, warum der vorherige Entwickler das gemacht hat. Ich hasse den Code anderer Leute =/ –

Antwort

5

Nein. Dadurch wird keine zusätzliche Funktionalität erreicht. Es verlangsamt wahrscheinlich, weil es versucht, zu sehen, ob es irgendeinen literarischen Inhalt in der Zeichenkette gibt sowie irgendwelche Variablen, die ausgewertet werden sollen.

+0

Nun, da alle numerischen Indizes zu "int" gezwungen werden, verlangsamt es es (da es zwei Typumwandlungen anstelle von 0 vornehmen muss: 'int-> string-> int'). .. – ircmaxell

1

Zwei Wörter: Variable Interpolation.

In PHP sind Zeichenketten mit doppelten Anführungszeichen eine Besonderheit, da sie für alle Variablen in der Zeichenkette analysiert werden, und sie geben den Literalwert der Variablen aus, wenn sie eine findet.

Also in diesem Fall ist das Endergebnis genau das gleiche.

Ich würde vorschlagen, die zweite Methode zu verwenden, weil es die zusätzliche Zeit speichert, die es dauern würde, die Zeichenfolge zu analysieren.

2

Gehen Sie für die zweite Version. Es gibt keinen Unterschied im Endergebnis, aber der zweite ist schneller. Die erste muss durch PHP interpoliert werden, während die zweite ohne zusätzlichen Aufwand in Token umgewandelt werden kann. (Der Unterschied in den beiden ist jedoch trivial.)

Da die zweite Version einfacher zu lesen ist, gehen Sie mit ihm.

1

nein. nicht nur kein Grund, Sie möchten möglicherweise $ rowID umwandeln, wenn die Validierung an anderen Stellen nicht ordnungsgemäß durchgeführt wird. wie $array[(int)$rowID]['value']

+0

'$ rowID' kommt von einem Datenbankaufruf, also ist es der richtige Typ. –

1

Der einzige Grund, es wie gezeigt zu tun, ist zu erzwingen, was auch immer diese Variable sein soll. Beispiel: $ rowID war ein Objekt und dieses Objekt hat eine toString() -Methode. Im ersten Fall wird es mit dieser Zeichenfolge verknüpft. Im zweiten Fall würde es abstürzen.

+0

Würde '(string) $ rowID' nicht funktionieren? –

+0

Ich habe nicht gesagt, dass es der einzige Weg ist, es zu tun. Nur dass es der einzige Grund war, es zu tun. – DampeS8N

+0

Ah, ok. Vielen Dank. Das würde Sinn machen.'$ rowID' ist ein int, also spielt es keine Rolle. Manchmal hasse ich wirklich den Code anderer Leute ... –

1

Dies ist eine knifflige Situation, da $ array ["$ rowId"] einen Array-Map-Wert basierend auf einem STRING-Schlüssel adressiert, während $ array [$ rowId] die Array-Map basierend auf dem Typ von adressieren würde Skalarwert, der $ rowId ist. Wenn $ rowId keine Zeichenkette ist, könnte dies möglicherweise Probleme verursachen.

dieses heraus versuchen und sehen, ob es einen Unterschied

$index = 5; 
$intIndexArray = array($index => "hello"); 
$stringIndexArray = array("$index" => "world"); 
echo $intIndexArray["$index"]; 
echo $stringIndexArray[$index]; 

macht, wenn ein Unterschied besteht, weder „Hallo“ oder „Welt“ gedruckt ...

+1

Ich habe das gerade getestet und es macht keinen Unterschied. Vielen Dank! –