Forum Doku Wiki Blog

Forumsarchiv 2004, Oktober
Punktoperator

archivierte Beiträge lesen

  1. (PHP) Punktoperator von Wolfgang, 20. 10. 2004, 00:55

Punktoperator

Der folgende Beitrag wurde am 20. 10. 2004, 00:55 Uhr von Wolfgang veröffentlicht.

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="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
$var=$var.$var
?>

Was mir beim ausführen ca. 3-4 x länger vorkam als wenn ich $var direkt mit doppelt so vielen "&nbsp;" belegt habe. Kann auch nur einbildung sein, habe es nicht gemessen, aber mehrmals probiert.

Naja, vielleicht weiß ja jmd was dazu. Danke!

MfG

Wolfgang

Punktoperator

Der folgende Beitrag wurde am 20. 10. 2004, 02:14 Uhr von Horst Nogajski veröffentlicht.

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="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
> $var=$var.$var
> ?>

> Was mir beim ausführen ca. 3-4 x länger vorkam als wenn ich $var direkt mit doppelt so vielen "&nbsp;" 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";

Punktoperator

Der folgende Beitrag wurde am 20. 10. 2004, 06:06 Uhr von Tom veröffentlicht.

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
--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau

Punktoperator

Der folgende Beitrag wurde am 20. 10. 2004, 13:45 Uhr von Horst Nogajski veröffentlicht.

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

Punktoperator

Der folgende Beitrag wurde am 20. 10. 2004, 16:44 Uhr von Tom veröffentlicht.

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
--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4