PHP-Klassen und PHP-Libraries einfügen

Wenn man eigene PHP-Klassen oder fremde PHP-Libraries in ein Projekt einfügen möchte ist das mit webEdition ganz einfach.

In größeren Projekten kommt es mit der Zeit vor, das externe PHP-Klassen, Libraries oder eigene PHP-Klassen erstellt werden sollen. Es gibt verschiedene Möglichkeiten dies zu realisieren. Eine Möglichkeit besteht darin die Klasse(n) innerhalb einer/mehrerer Vorlage/n zu definieren. Eine andere Möglichkeit besteht darin ein HTML-Dokument anzulegen und die Dateierweiterung auf .php zu stellen. In beiden Fällen müssen die Klassen über ein <we:include>, ein PHP-include oder einen autoloader integriert werden. Die Verwendung ist damit recht umständlich und aufwändig.

PHP-Klassen in webEdition erstellen

Eine andere Möglichkeit besteht darin die PHP-Klassen innerhalb von custom/classes zu erstellen und den webEdition-autoloader die Arbeit machen zu lassen. Man kann dazu entweder die Klassen in das Verzeichnis ziehen, oder dies komfortabler mittels webDAV zu machen.

Um eine möglichst große Flexibilität für die Klassen zu erhalten gibt es in webEdition 3 Möglichkeiten, wie diese Klassen anzulegen sind.

Klassen im webEdition-Stil

Alle PHP-Klassen in webEdition folgen dem Schema PREFIX_DOMAIN_DOMAIN2_KLASSE. Für eigene Klassen ist der Prefix fest auf cs eingestellt. Domain, Domain2, .. und auch den Klassennamen kann man frei wählen.

Soll nun also eine Klasse für Dateiverarbeitung (file) in der Domain core erstellt werden, dann legt man die Datei mit dem Namen cs_core_file.class.php im Verzeichnis core ab. Der Inhalt der Datei kann dann so aussehen:

<?php
class cs_core_file{
  public function do():void{
   echo 'done';
  }
}

Klassen im PSR0-Stil

Anders als der webEdition-Stil, sieht der offzielle PSR-0-Stil vor, das die Dateinamen nicht den vollen Domain-Pfad enthalten. Für die Klasse cs_core_file heißt die Datei nur file.class.php und befindet sich im Verzeichnis core. Sonst gibt es keine Änderungen zum webEdition-Stil.

Klassen im PSR4-Stil (ohne Prefix)

Anders als der PSR0, werden bei PSR4 PHP-Namespaces verwendet. Man würde also Beispielsweise den Namespace core verwenden und darin dann die Klasse file definieren. Dazu legt man das Verzeichnis core an und legt darin eine Datei file.class.php an:

<?php
namespace core;
class file{
  public function do():void{
    echo 'done';
  }
}

Der Aufruf der Klasse muß dann entweder im Namespace selbst, per use definiert oder absolut als new \core\file() erfolgen.

Klassen im PSR4-Stil (mit Prefix)

Der PSR4-Stil wie oben beschrieben eignet sich sehr gut, wenn man selbst Klassen anlegt und den Überblick behalten kann und will. Für externe Quellen, wie libraries, die extern gehostet werden, sind die Namespaces bereits vergeben. Hier werden dann oftmals Namespaces gesetzt denen der Autor vorangestellt ist. Ein Beispiel könnte so aussehen:

namespace elias\Projects\databases\join;

Man müßte nun also den Pfad elias/Projects/databases/join erstellen und darin die Dateien ablegen. Für den späteren Zugriff und die Übersicht im Projekt kann das sehr hinderlich sein und vielleicht möchte man auch alle externen libs in ein Unterverzeichnis /lib ablegen. Um dies zu ermöglichen, liegt im Verzeichnis classes bereits eine Datei autoload.php. Diese Datei wird vom autoloader verarbeitet um Klassen zu suchen. Soll nun nur databases als Verzeichnis in classes/lib erscheinen, muß der autoloader so parametriert werden das er alles was mit elias\Projects beginnt im Verzeichnis classes/lib sucht. Dazu ergänzt man die Datei wie folgt:

we_base_autoloader::registerNameSpace('elias\\Projects', 'lib/','.php');

So wird jede Klasse aus dem Namespace elias\Projects automatisch innerhalb von lib gesucht. Der letzte Parameter gibt dabei noch an, das alle Klassen die Erweiterung .php und nicht .class.php tragen.

Es ist hiermit auch möglich den ganzen Namespace elias/Projects/databases umzubenennen um ihn einfacher zu finden. Dies könnte folgendermaßen aussehen:

we_base_autoloader::registerNameSpace('elias\\Projects\\databases', 'lib/myOtherDatabase','.inc.php');
powered by webEdition CMS