Felix Riesterer: DOMDocument und PHP5

Beitrag lesen

Lieber Matti Mäkitalo,

herzlichen Dank für Deine ausführlichen Erläuterungen und die aufmunternden Worte!

Wenn du den Parsing-Aufwand des PHP-Parser reduzieren willst, nimm besser einen Cache wie APC oder OPCache (Standard seit PHP 5.5).

Mir scheint, seit ich alle PHP-Dateien grundsätzlich inkludiere, ist die Server-Antwort auf meinem lokalen Testsystem (Apache/Ubuntu) wesentlich schneller, da für jeden Aufruf derselbe Compiler-Vorgang benötigt wird. Das lässt sich offensichtlich prima cachen...

Ansonsten arbeitet die ganze Welt mit Composer. Die Gründe sind vielfältig: du beschreibst deine Abhängigkeiten deklarativ (statt imperativ den Code einfach in deinen Source-Tree reinzukopieren), es bietet einen Update-Mechanismus an, und es generiert dir einen Autoloader.

Und was ist mit meinen eigenen Klassen?

Mach einfach folgendes:

  1. Lade dir die composer.phar herunter (siehe Composer-Intro), am einfachsten erstmal in deinen Projektordner.
  2. Lege in deinem Projektordner eine Datei an mit dem Namen composer.json und dem Inhalt
    {
      "require" : {
        "masterminds/html5": "1.*"
      },
    }
  3. Öffne eine Shell, gehe zu deinem Projektordner und tippe ein
    "php composer.phar install"
  4. In deinem Code, mach ein require(_once) auf vendor/autoload.php
  5. Verwende einfach die Klassen, ohne weiteres require'n von irgendwelchen Dateien.

Wie verhält es sich mit meinen eigenen Klassen, die ich als Helfer-Objekte definiert habe? Aktuell inkludiere ich die brav der Reihe nach. Eine Funktion filtert den Dateibaum nach "*.lib.php", um diese Dateien per "include" einzubinden. In jeder dieser "*.lib.php" wird jeweils eine Klasse definiert, die für sich alleine stehen kann. Untereinander gibt es keine Abhängigkeiten.

Von __autoload habe ich schon gelesen... mehr aber auch nicht. Warum sollte das für mein Projekt sinnvoll sein? Ich habe eine Methode "load_libraries" in meiner Singleton-Klasse (index.php), die oben genanntes Vorgehen umsetzt. Sollte ich das durch einen composer ersetzen? Wieviele MB an Script-Dateien soll mein Projekt denn am Ende groß sein? Ich hatte in meiner naiven Einfalt etwas um die 5MB erwartet...

Willst du die Abhängigkeit irgendwann mal aktualisieren, dann tippe ein "composer update".

Und ich muss mir sicher sein, dass die jeweiligen Paket-Informationen des Composers einerseits topaktuell sind, die tatsächlichen PHP-Dateien aus den originalen Quellen bezieht und dass nebenbei keine Malware mit hineininjiziert wird...?

Weiterhin solltest du composer.phar und das vendor-Verzeichnis nicht in deine Versionsverwaltung einchecken.

Klar... wenn ich mal endlich eines einsetzen würde.

Composer ist kein Hexenwerk, sondern recht einfach. In 90% der Fälle reichen dir oben genannte Befehle, und dir steht eine ganze neue Welt an Bibliotheken zur Verfügung. Kannst ja mal suchen auf https://packagist.org/.

Habe erst seit molilys Posting im Umfeld des HTML5-Projektes davon erfahren, dass es soetwas gibt. "Neue Welt" trifft es ziemlich präzise! Für mein Hobby-Projekt vielleicht totaler Overkill, vielleicht aber auch "best practice" (falls mal jemand neues übernehmen muss) - ich werde mir das einfach einmal genauer anschauen.

Liebe Grüße,

Felix Riesterer.

--
"Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)