Wolfgang: Punktoperator

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

  1. 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";

    1. 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
      1. 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

        1. 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