PHP WTF #10

Vorsicht! Microtime liefert negative Ergebnisse!

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
$start = microtime();
$i = 1000;
while ($i--)
{
//do stuff
}
$end = microtime();
echo 'Took ' . $end - $start . ' seconds';
<?php $start = microtime(); $i = 1000; while ($i--) { //do stuff } $end = microtime(); echo 'Took ' . $end - $start . ' seconds';
<?php
  $start = microtime();
  $i = 1000;
  
  while ($i--)
  {
	//do stuff
  }
  
  $end = microtime();

  echo 'Took ' . $end - $start . ' seconds';
Microtime

Microtime

Okay, durchatmen. Wo liegt der Fehler? Kenner bemerken vielleicht, dass das Wörtchen Took abhanden gekommen ist. Es geht einfach beim konkatenieren was schief:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
echo "Calculating " . 6 + 5 . " is fun!";
<?php echo "Calculating " . 6 + 5 . " is fun!";
<?php
echo "Calculating " . 6 + 5 . " is fun!";
Konkatenation

Konkatenation

Nach Operator-Wertigkeit müssen wir natürlich klammern:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
echo "Calculating " . (6 + 5) . " is fun!";
<?php echo "Calculating " . (6 + 5) . " is fun!";
<?php
echo "Calculating " . (6 + 5) . " is fun!";

Selbiges Problem tritt auch im Beispiel oben auf. Der Output von microtime() ist Millisekunden (Scriptlaufzeit) Sekunden (time()), also etwa 0.77571900 1350824124. Da bei unserer Rechnung einfach ein String -> Float – Cast vorgenommen wird und zudem noch die Operatoren-Wertigkeit missachtet wurde, kam es zu diesem merkwürdigen Ergebnis.

Weitere Posts:

Dieser Beitrag wurde unter php, PHP-WTF, webdev veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert