// Bessere Performance durch PHP-Klassenkonstanten statt define()

Kleiner PHP-Tipp am Rande: wer wie ich Konfigurationswerte und andere eigentlich konstanten Werte äußerst ungern in nicht-konstanten Variablen oder Arrays unterbringt (z.B. $_CONFIG['foo'] = “bar”;), sollte sich dennoch das massenhafte Einsetzen von define() gut überlegen. Eine bessere Alternative stellen Klassenkostanten dar:

class config {
    const foo = "bar";
}
echo config::foo;

define() ist relativ langsam und hat einen nicht unerheblichen Ausführungs-Overhead. Auch apc_define_constants() hilft nicht wirklich weiter, da nur geringfügige Geschwindigkeitsvorteile erzielbar sind (und man auf IMHO hässliche Art und Weise in den Code eingreifen und sich an den ggf. nicht verfügbaren APC bindet).

Klassenkonstanten haben hingegen enorme Vorteile:

  • Klassenkonstanten werden zur Kompilierzeit geparst, es gibt keinen Ausführungs-Overhead.
  • Genau deshalb können sie OP-Code-Cache freundlich verarbeitet werden (define() wird immer wieder ausgeführt, OP-Code-Cache hin oder her!). Dies ist IMHO auch der Hauptvorteil, der für einen Einsatz in performance-krtitischen Anwendungen spricht, da OP-Code-Caches gut greifen ohne den Code anfassen zu müssen.
  • auf Klassenkonstanten kann performanter zugegriffen werden (kleinere Hashs!)
  • man hat nen schicken Namespace.

Also, falls man sich noch nicht damit befasst hat nochmal nachlesen, einsetzen und über die Vorteile freuen. :-)

Comments

No. 1 @ 2010/01/12 14:10

Vielen Dank für die Idee bzw. die Information, hat mir sehr gefallen!

komme von hier phphatesme.com hier her

gruß alex

Leave a comment…




  • E-Mail address will not be published.
  • Formatting:
    //italic//  __underlined__
    **bold**  ''preformatted''
  • Links:
    [[http://example.com]]
    [[http://example.com|Link Text]]
  • Quotation:
    > This is a quote. Don't forget the space in front of the text: "> "
  • Code:
    <code>This is unspecific source code</code>
    <code [lang]>This is specifc [lang] code</code>
    <code php><?php echo 'example'; ?></code>
    Available: html, css, javascript, bash, cpp, …
  • Lists:
    Indent your text by two spaces and use a * for
    each unordered list item or a - for ordered ones.
I'm no native speaker (English)
Please let me know if you find any errors (I want to improve my English skills). Thank you!
QR Code: URL of current page
QR Code: URL of current page 2009:05:09:bessere-performance-durch-php-klassenkonstanten-statt-define (generated for current page)