Hallo,
kann es sein das der Punktoperator in PHP für ziehmlich viel Rechenaufwande sorgt?
Ich hatte mal in einem Skript etwas ähnliches wie:
<?php
$var=" ";
$var=$var.$var
?>
Was mir beim ausführen ca. 3-4 x länger vorkam als wenn ich $var direkt mit doppelt so vielen " " belegt habe. Kann auch nur einbildung sein, habe es nicht gemessen, aber mehrmals probiert.
Da kann man wohl von der 'gefühlten' Zeit sprechen, oder? ;-)
Aber mal im Ernst, genau kann ich Dir die Frage nicht beantworten, aber, bei $var=$var.$var; muß die Variable halt 2x geparst werden und 1x mit neuem Inhalt gefüllt werden. In der anderen Variante fällt das ersatzlos weg. Das ist doch schon selbst erklärend, das das weniger Rechenzeit in Anspruch nimmt oder? Ich denke das der meiste (unnötige) Rechenaufwand durch nicht besonders vorteilhaft geschriebene Scripte entsteht. Der Punktoperator tut nur was der Scripter ihm sagt, ;-)
Und natürlich gibt es auch durch die Vielzahl an Möglichkeiten in PHP unterschiedlich schnelle Lösungen.
Z.B. wenn man eine Datei auf ihre Endung hin prüfen möchte, könnte man das so:
if(in_array('html',array('htm','html','shtm','shtml')))
oder so:
if(preg_match('/^.*htm.*$/','html'))
machen. Die Lösung mit der Funktion in_array() sieht erstmal Laienhafter aus als eine RegExp-Variante mit preg_match, ist aber in dem Fall ca. 40% schneller! (Was sich bei Überprüfung von z.B. 10.000 Dateiendungen schnell in einer fühlbaren Zeitverkürzung bemerkbar machen kann)
Oder wenn man mit echo Text ausgeben will und Strings mit dem Punktoperator verbindet. Selbst wenn man die Strings in einfache Anführungszeichen setzt '' anstelle von "", dann ist echo langsamer wie wenn die verschiedenen Strings durch Kommas separiert an echo übergeben werden. Im zweiten Fall arbeitet echo wie eine Funktion mit variabler Parameteranzahl, die die Elemente einfach (ohne mehrmaliges Parsen) nacheinander ausgibt, und ist fast doppelt so schnell wie in der 1. Variante:
echo 'bla'.'bla'.'bla';
echo 'bla','bla','bla';
Also in dem Fall sorgt der Punktoperator dann doch für ein überhöhtes Aufkommen an Rechenzeit. ;-)
Eine mehrteilige Zeichenkette mit Punktoperatoren verbunden, wird halt von links nach rechts abgearbeitet und an jedem Punkt wird eine Routine ausgeführt.
echo "Viele"."Grüße,\n"."Horst";