Beschreibung

Das Tool mpAutoloaderClassMap ist in der Lage, vordefinierte Verzeichnisse/Dateien eines PHP-Projektes nach vorhandenen Klassenbezeichnungen (Klassennamen, Klassennamen von abstrakten Klassen, Traits und Interfacenamen) zu suchen und eine sogenannte Class Map Konfigurationsdatei aus den Ergebnissen zu erstellen, welches dann für eine Autoloader-Implementation verwendet werden kann.

Das Lösen von Abhängigkeiten (auf Dateisystemebene), das Laden von benötigten PHP-Dateien mit Klassendeklarationen, kann in PHP-Projekten durch verschiedene Wege erreicht werden.

PSR-4:

Der PSR-4-Standard ist die neue Norm für das Autoloading in PHP und ist auch die empfohlene Variante für PHP-Projekte. In der Regel wird das Autoloading in der composert.json konfiguriert und Composer übernimmt dann das Einbinden der Dateien, wenn man das erste Mal die Klasse im Projekt verwendet.

Ordnerstruktur des Projekts:

my_project/
    src/
        Helloworld.php
    composer.json
    index.php

Inhalt der Datei my_project/src/Helloworld.php:

<?php
declare(strict_types=1);

namespace Com\Foobar;

class Helloworld
{
    public function __construct()
    {
        echo "Hello world!";
    }
}

Einstellung in der composer.json:

{
    "autoload": {
        "psr-4": {
            "Com\\Foobar\\": "src/"
        }
    }
}

Verwendung der Klasse:
Composer kümmert sich um das Autoloading, die Klasse kann sofort verwendet werden.

$foo = new \Com\Foobar\Helloworld();

PSR-0:

Das Mappen des Klassenbezeichnungen auf eine Datei im Dateisystem. Hinweis: Am 21.10.2014 wurde PSR-0 als veraltet (deprecated) markiert. Als Alternative wird PSR-4 empfohlen.

// Example
Location:  /path/to/your/lib/Com/Foobar/Helloworld.php
Classname: Com_Foobar_Helloworld

// Usage:
// a.) First you have to register a autoloader which maps
// Com_Foobar_Helloworld to Com/Foobar/Helloworld.php within
// /path/to/your/lib/
// b.) Then you can use something like
$foo = new Com_Foobar_Helloworld();
// or
echo (class_exists('Com_Foobar_Helloworld')) ? 'yes' : 'no';

Includes:

Über include/require Statements, bevor die Klasse verwendet wird. Das ist die altbekannte Vorgehensweise und funktioniert weiterhin gut. Jedes Mal die Datei einbinden, wenn man es benötigt.

// example:
Location:  /path/to/your/lib/Com/Foobar/Helloworld.php
Classname: Com_Foobar_Helloworld

// usage:
require_once('/path/to/your/lib/Com/Foobar/Helloworld.php');
$foo = new Com_Foobar_Helloworld();
// or
if (!class_exists('Com_Foobar_Helloworld')) {
    require_once('/path/to/your/lib/Com/Foobar/Helloworld.php');
    echo 'Now Com_Foobar_Helloworld exists';
}

Class Map:

Diese Lösung benötigt eine Konfiguration, in der die Klassenbezeichnungen auf eine Datei im Dateisystem gemappt werden.

// example:
Location:  /path/to/your/lib/Com/Foobar/Helloworld.php
Classname: Com_Foobar_Helloworld

// Class map configuration file having a content like
return [
    ...
    'Com_Foobar_Helloworld' => '/path/to/your/lib/Com/Foobar/Helloworld.php',
    'Com_Foobar_Response_Html' => '/path/to/your/lib/Com/Foobar/Response/Html.php',
    ...
];

// usage:
// a.) first you have to register a autoloader which loads required classes by
// using the class map array structure.
// b.) then you can use something like
$foo = new Com_Foobar_Helloworld();
// or
echo (class_exists('Com_Foobar_Helloworld')) ? 'yes' : 'no';

Wenn nun das Projekt, an dem man Arbeitet, nicht PSR-4/PSR-0 kompatibel ist, man also keine Möglichkeit hat, anhand der Klassenbezeichnungen die dazugehörigen Dateien zu laden und man möchte nicht überall die require/include Statements einsetzen, dann ist die Verwendung der Class Map Lösung eine gute Alternative.

Das ist die Grundidee des Class Map Generators "mpAutoloaderClassMap", es ist in der Lage ein vorgegebenen Projektverzeichnis rekursiv nach vorhandenen Klassendefinitionen (class/interface/trait) zu parsen und aus den Ergebnissen eine Class Map Konfigurationsdatei zu generieren.

Das Verhalten des Class Map Generators kann über einige Optionen gesteuert werden, Details dazu gibt es auf der Projekseite.


Download