[TYPO3-german] API-Aufruf in T3

Stephan Schuler Stephan.Schuler at netlogix.de
Thu Mar 25 20:09:35 CET 2010


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hallo zusammen.


Euer Ansatz läuft in meinen Augen grundlegend an der API vorbei.

Eine Klasse mit new zu instanziieren ist unschön. Das würde nämlich bedeuten, dass die zu instanziierende Klasse zu diesem Zeitpunkt innerhalb der PHP-Laufzeit vorhanden ist. Vorhanden heißt: Die zugehörige Datei wurde eingebunden, die Klasse ist interpretiert. Es gibt unzählige Klassen, je größer die Extension desto mehr. Aber bei den meißten Seiten wird nur ein Bruchteil der verfügbaren Klassen wirklich benötigt. Die Anzahl der unnötigen Dateizugriffe (include) und der unnötige Speicherbedarf aufgrund der vielen gemerkten Klassendeklarationen ist enorm.

Stattdessen sollten innerhalb des TYPO3-Frameworks (auch wenn TYPO3 ein CMS und kein Framework ist würde ich das Sammelsurium an API-Elementen zusammen den zugehörigen gängigen Anwendungsmustern als Framework bezeichnen) die statische Methode t3lib_div::makeInstance verwendet werden.
http://typo3.org/fileadmin/typo3api-4.0.0/d3/d3d/classt3lib__div.html#a170cc12434c0d356e10c362a0af6843

Zunächst ohne Class-Autoloader ändert das am Problem grundsätzlich nichts, die Klasse muss dem Sytem bekannt sein. Allerdings hat makeInstance den Vorteil, dass man die Klasse per "xclass"-Mechanismus überschreiben kann. makeInstance berücksichtigt das, new nicht.

Um das Problem der nicht geladenen Datei zu erledigen sollte an der Stelle an der die Klasse Verwendung findet ein require_once stattfinden. Folgendes hat deshalb vor jeder Klassendeklaration zu stehen die deine Klasse verwendet:
require_once(t3lib_extMgm::extPath('deineextension').'class.luc.php');

Das ist ohne Autoloader gängige Praxis. Erkennen kann man das zum Beispiel daran dass der Kickstarter Plugins erzeugt, die noch vor der Klassendeklaration die piBase-Klasse auf diese weise einbinden.

Den Autoloader (der dir eigentlich das require_once ersparen sollte, wobei ich zugeben muss damit selbst noch keine Erfahrungen zu haben, weshalb ich da nur "vermuten" kann was ich bisher so überflogen habe) ist mit 4.3 neu und wird über die ext_autload.php konfiguriert. Die hat ein recht interessantes Format hat:
<?php
return array('luc'=> t3lib_extMgm::extPath('deineextension').'class.luc.php');
?>
Heißt: Die Datei gibt ein Array zurück (was darauf hinweit dass Datei innerhalb einer Methode eingebunden wird und man damit dann unmittelbar den Rückgabewert einer Methode definert anstatt den Umweg über eine Variable zu gehen) das pro Element als Schlüssel den instanziierbaren Klassennamen hat und als Wert den Pfad zur Datei in der die Klasse steht.

Und spätestens jetzt ist klar, warum new foo(); zugunsten einer schönen API blöd ist: Weil das den Autoloader umgehen würde.

Der Teil mit makeInstance() ist Pflicht, der Teil des Autoloades Kür.


Grüße,



Stephan Schuler
TYPO3 Entwickler

Telefon: +49 (911) 539909 - 0
E-Mail: Stephan.Schuler at netlogix.de

- --
netlogix GmbH & Co. KG
Systemhaus | Trainingscenter | Medienagentur
Andernacher Straße 53 | 90411 Nürnberg
Telefon: +49 (911) 539909 - 0 | Fax: +49 (911) 539909 - 99
E-Mail: mailto:info at netlogix.de | Internet: http://www.netlogix.de/

netlogix GmbH & Co. KG ist eingetragen am Amtsgericht Nürnberg (HRA 13338)
Persönlich haftende Gesellschafterin: netlogix Verwaltungs GmbH (HRB 20634)
Umsatzsteuer-Identifikationsnummer: DE 233472254
Geschäftsführer: Stefan Buchta, Matthias Schmidt

________________________________________


Von: typo3-german-bounces at lists.typo3.org [typo3-german-bounces at lists.typo3.org] im Auftrag von Rainer Schleevoigt [rainer at webmasterei-hamburg.de]
Gesendet: Mittwoch, 24. März 2010 06:41
An: German TYPO3 Userlist
Betreff: Re: [TYPO3-german] API-Aufruf in T3

Hallo Peter,

ist die Class dann in anderen EXTs sichtbar?
>
> Includiere in ext_localconf.php.
>
Gruß Rainer

- --
Webmasterei Hamburg
Dipl.-Ing. R. Schleevoigt / TYPO3 Certified Integrator
Ust-ID:  DE239491976
mail:rainer at webmasterei-hamburg.de
http://webmasterei.com
22303 Hamburg | Novalisweg 10
+49 40 27806982 | skype:kontaktschmied

_______________________________________________
TYPO3-german mailing list
TYPO3-german at lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

-----BEGIN PGP SIGNATURE-----
Version: PGP Universal 3.0.0 (Build 2881)
Charset: Windows-1252

wpUDBQFLq7Typp0IwsibV8MBCO3+A/9eIMdSgAKhczlSbhYAZ0y/56sJAaSGRH59
dXdQImNk8jjj5QICJABmXgCiVsxherzPj73oAXaQ0N4eMGiRcaHINJRTz+uR5gs4
j0kAwKzTBces5MoMf4cYlYlM1cYaZt7OzIQjIsU2xAFBCNvfv86kyvw4OAd5X6UZ
hrsOdMHTVw==
=Yc89
-----END PGP SIGNATURE-----


More information about the TYPO3-german mailing list