Punktoperator
Wolfgang
- php
0 Horst Nogajski0 Tom0 Horst Nogajski0 Tom
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.
Naja, vielleicht weiß ja jmd was dazu. Danke!
MfG
Wolfgang
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";
Hello,
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'))
if (false!==strpos('htm,html,shtm,shtml','html'))
und sieht das noch laienhafter aus *gg* ?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo,
if (false!==strpos('htm,html,shtm,shtml','html'))
und sieht das noch laienhafter aus *gg* ?
Test: beim Durchlaufen (foreach) eines Arrays mit ~ 6000 Einträgen und dem Vergleich mit:
Funktion Zeit
preg_match() = 0.1394340000
in_array() = 0.1061300000
strpos() = 0.0997190000
Das macht zwischen in_array und strpos noch mal 5-8 %. Nicht schlecht.
Und ja, es sieht noch laienhafter aus, *g*!
Viele Grüße,
Horst
Hello Horst,
if (false!==strpos('htm,html,shtm,shtml','html'))
und sieht das noch laienhafter aus *gg* ?Test: beim Durchlaufen (foreach) eines Arrays mit ~ 6000 Einträgen und dem Vergleich mit:
Funktion Zeit
preg_match() = 0.1394340000
in_array() = 0.1061300000
strpos() = 0.0997190000
Das macht zwischen in_array und strpos noch mal 5-8 %. Nicht schlecht.
Und ja, es sieht noch laienhafter aus, *g*!
Dann kann ich es ja in meine "Laientips für F(l)achleute" aufnehmen.
Der Titel des Buches ist ab sofort und hiermit geschützt, da veröffentlicht!
Harzliche Grüße aus http://www.annerschbarrich.de
Tom