Bei der Programmierung von Extensions soll anstelle der PHP-Funktion new() die TYPO3-Funktion makeInstance() benutzt werden. Was aber, wenn dem Konstruktor Parameter übergeben werden sollen?
Die meisten Extensionen die für TYPO3 geschrieben werden, benutzen Klassenstrukturen statt eines prozeduralen Ansatzes. In Klassen gibt es für die Initialisierung und das abschliessende Aufräumen die Funktionen:
- function __construct() und
- function __destruct()
Diese werden automatisch beim Erstellen (__construct()), bzw. Zerstören einer Instanz (__destruct()) aufgerufen.
In „normalem“ PHP wird zum Erstellen einer Instanz die Funktion new(‚Klassenname‘); aufgerufen. Auch in einer Extension für TYPO3 wäre dies machbar, jedoch wird dringend davon abgeraten. Die Funktion new() erzeugt die Klasse nämlich direkt auf PHP-Weise, ohne dabei auf TYPO3-Spezifitäten wie XCLASSes einzugehen. Liegt eine Klasse als XCLASS vor und würde eine neue Instanz mit new() erzeugt, so würde die Erzeugung fehlschlagen.
Kommt dagegen makeInstance(‚Klassenname‘) zum Einsatz wird das Vorhandensein einer XCLASS geprüft und entsprechend beachtet. Bis zur Version 4.3 war es allerdings nicht möglich makeInstance(), und dadurch dem __construct(), weitere Parameter zu übergeben.
Vor der Version 4.3 war daher mittels des Funktionsaufrufes makeInstanceClassName(‚Klassenname‘) der korrekte Klassenname geprüft werden., welche den korrekten und geprüften Klassennamen zurück gibt (Im Falle einer XCLASS würde diesem Namen ein ux_ vorangestellt). Der Rückgabewert konnte dann risikofrei mit new() verwendet werden, wobei dem Konstruktor natürlich auch Parameter mitgegeben werden können.
Ab Version 4.3 ist dies nun wesentlich einfacher. Parameter können nun ohne obigem Umweg per makeInstance(‚Klasse‘,Param1,Param2, etc) übergeben werden. Diese werden an den eigentlichen Konstruktor mittels ReflectionClass->newInstanceArgs() übergeben.