-----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.schu...@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:i...@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-boun...@lists.typo3.org 
[typo3-german-boun...@lists.typo3.org] im Auftrag von Rainer Schleevoigt 
[rai...@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:rai...@webmasterei-hamburg.de
http://webmasterei.com
22303 Hamburg | Novalisweg 10
+49 40 27806982 | skype:kontaktschmied

_______________________________________________
TYPO3-german mailing list
TYPO3-german@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-----
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an