2013-07-05 14 views
7

PHP manual besagt, dass:

3 auf den aktuellen Wert von $ a kann 'a $ 3 + =' werden Hinzufügen geschrieben. Diese bedeutet genau "nimm den Wert von $ a, addiere 3 dazu, und weise ihn zurück in $ a". Zusätzlich zu kürzer und klarer, führt dies auch in schnellerer Ausführung.

Früher dachte ich, dass $a += 3 lediglich Syntax Zucker ist für $a = $a + 3 und so sollten sie gleich in jeder Hinsicht sein.

Warum führt $a += 3 zu einer schnelleren Ausführung im Vergleich zu $a = $a + 3?

+0

wenn nichts anderes, es ist etwas weniger Code zu analysieren. –

+0

Wie machst du es? Es wäre interessant zu wissen, dass ... – CodeAngry

+0

meine Vermutung ist, dass Sie $ a erhöhen können, anstatt $ a in eine neue Variable zu ändern, die nur 3 Ziffern größer ist – exussum

Antwort

4

$a = $a + 3 fügt 3 zu $ ​​a in einem temporären Speicherbereich hinzu und weist das Ergebnis $ a zu; während $a += 3 3 direkt zu $ ​​a addiert; so ist der Unterschied ein paar Bytes des Speichers für die vorübergehende Speicherung, sowie eine Zuordnung

+0

Ich bin mir nicht sicher, ob ich dreimal angerufen werde.'$ a = $ a + 3': Kopieren Sie $ a in den temporären Speicherbereich, fügen Sie 3 zum Wert im temporären Speicherbereich hinzu, überschreiben Sie den Wert von $ a mit dem Wert aus dem temporären Speicherplatz; '$ a + = 3': addiere 3 zum Wert von $ a - kein Kopieren von $ a in tempspace nötig; Es ist nicht nötig, den Tempspace-Wert auf $ a zu schreiben –

0

$a = $a + 3 eine temporäre Variable in dem PHP VM verwenden könnte. Während $a += 3könnte direkt ausführen.

PS: Ich betone die Macht. Sehr nicht sicher ...

Es könnte zu C++ ‚s ähnlich: ++i gegen i++ :)

3

PHP ist ein Interpreter, so, um eine gute Leistung für haben Gute Code, muss es sich auf beschränken nicht "gültig" komplexe Opimisierungen (wie Compiler können, weil sie Zeit dafür haben).
Seit der Zeit eines Assemblers ist es besser, =+ als seine äquivalente Summe zu haben, nur weil es weniger Ressourcen verbraucht.
Im Falle von PHP, Token =+ zu T_PLUS_EQUAL, auch am besten von PHP ausführbare ausgeführt, und auf der anderen Seite, die Summe, nun, es ist Tokenized (und ausgeführt) wie eine Summe.

Im Anschluss an die "Dumps" von beiden token_get_all()

<?php echo '<pre>'; 

print_r(array_map(function($t){if(is_array($t)) $t[0]=token_name($t[0]); return $t;}, 
      token_get_all('<?php $a=$a+3 ?>'))); 

print_r(array_map(function($t){if(is_array($t)) $t[0]=token_name($t[0]); return $t;}, 
      token_get_all('<?php $a+=3 ?>'))); 

// results in: 
?> 

Array 
(
    [0] => Array 
     (
      [0] => T_OPEN_TAG 
      [1] => 1 
     ) 

    [1] => Array 
     (
      [0] => T_VARIABLE 
      [1] => $a 
      [2] => 1 
     ) 

    [2] => = 
    [3] => Array 
     (
      [0] => T_VARIABLE 
      [1] => $a 
      [2] => 1 
     ) 

    [4] => + 
    [5] => Array 
     (
      [0] => T_LNUMBER 
      [1] => 3 
      [2] => 1 
     ) 

    [6] => Array 
     (
      [0] => T_WHITESPACE 
      [1] => 
      [2] => 1 
     ) 

    [7] => Array 
     (
      [0] => T_CLOSE_TAG 
      [1] => ?> 
      [2] => 1 
     ) 

) 

Array 
(
    [0] => Array 
     (
      [0] => T_OPEN_TAG 
      [1] => 1 
     ) 

    [1] => Array 
     (
      [0] => T_VARIABLE 
      [1] => $a 
      [2] => 1 
     ) 

    [2] => Array 
     (
      [0] => T_PLUS_EQUAL  /// <= see here!!!!! 
      [1] => += 
      [2] => 1 
     ) 

    [3] => Array 
     (
      [0] => T_LNUMBER 
      [1] => 3 
      [2] => 1 
     ) 

    [4] => Array 
     (
      [0] => T_WHITESPACE 
      [1] => 
      [2] => 1 
     ) 

    [5] => Array 
     (
      [0] => T_CLOSE_TAG 
      [1] => ?> 
      [2] => 1 
     ) 

) 
Verwandte Themen