| 

.NET C# Java Javascript Exception

2
Hallo Allerseits,

Anwendung: In einem PHP Projekt werden von Klassen und Methoden die DocComments ausgewertet und zur Ablaufsteuerung verwendet. Das sieht so aus, dass zum Beispiel Methodenparameter im DocComment typisiert und als required markiert werden können. Auch ein Role-Management ist auf diese Art und Weise implementiert.

Problem: eAccelerator strippt die DocComments beim zweiten include einer Datei (neuer call) heraus, sodass die Validierungen fehlschlagen.
Rekompilieren des ByteCode Cache ist nicht möglich, sodass dieses Verhalten nicht geändert werden kann.

Meine bisherigen Lösungsansätze:
1) Da alle includes zentral per __autoload geregelt sind vor dem include ein touch auf die Datei -> Nicht wirklich schön, da die Dateizeiten manipuliert werden und es rechenintensiv ist.
2) Internes Caching der DocComment in einer DB (SqLite) -> Nicht schön, da zu harte Abhängigkeit vom Cache und somit sehr fehleranfällig.
3) Den eigentlichen Sourcecode parsen anstatt Reflection zu verwenden -> Rechenintentiv und bei 'verschlüsselten' Sourcen nicht anwendbar.
4) Eine Art BuildScript, dass alle Klassen im Development-System (es gibt auch noch Live) durchgeht und die DocComments cached -> Aufwendig zu Implementieren, aber mein Favorit.

Nun die Frage: Hab ich Möglichkeiten übersehen? Bin für jeden Hinweis dankbar, da ich mich bei keiner der Alternativen wirklich wohl fühle ;)
12.11.2009
DaSpors 4,2k 2 8
Dein Beitrag liegt ja schon etwas zurück. Vielleicht hast du es schon gelöst. Aber generell: Du verwendest Kommentare, die im Prinzip das Programm beeinflussen sollen? Wenn ich es recht verstehe implementierst du dadurch sowas wie Aspektorientierung (AOP), was PHP aber nicht bietet.
tboerner 27.01.2011
Ich verwende DocComments um eine Art Attribute (wie in .NET) nachzubauen. Grund dafür IST ja eben dass PHP das nicht bietet ;)
DaSpors 07.02.2011
Momentan ist Möglichkeit 2) im Einsatz (leicht verfeinert) und hat sich als sehr stabil erwiesen.
DaSpors 07.02.2011
3 Antworten
0
eAccelerator ausschalten? Du scheinst ihn ja eh nicht zu nutzen, wenn du beim autoload touched.
26.01.2011
phphatesme 25 1
Nicht gelesen? Das ist eine Möglichkeitenaufzählung.
DaSpors 07.02.2011
0
Jeder dieser Caches (APC, eAccelerator, xcache) wird die Kommentare "strippen" denn dies speichern ja den geparsten Byte-Code - und das erste was dabei übersprungen wird, sind natürlich die Kommentare. Daher würde ich den kompletten Ansatz verwerfen. Irgendeine Logik für den Programmablauf in Kommentaren der Programmiersprache zu verstecken ist so oder so krude (wenn man keinen Precompiler hat).
PHP ist nunmal loosely typed und wenn das Projekt eine strenge Typisierung erfordert, dann ist PHP das falsche Tool.
04.02.2011
Laph 11 1
"Logik für den Programmablauf" -> ist das nicht, sonders Methoden(oder was auch immer) Attribute
"dann ist PHP das falsche Tool" -> Es geht hier um Möglichkeiten der Implementierung. 'Gibt es so nicht fertig' ist kein Grund PHP auszuschließen...man darf auch ruhig mal was selber machen.
DaSpors 07.02.2011
0
Wenn du Eaccelerator mit --with-eaccelerator-doc-comment-inclusion kompilierst dann bleiben die Doc Comments auch erhalten.
09.02.2011
Forestsoft 66 1 1
Zitat aus der Frage: Rekompilieren des ByteCode Cache ist nicht möglich, sodass dieses Verhalten nicht geändert werden kann.
DaSpors 10.02.2011
Warum das nicht möglich ist lässt du aber offen...
Forestsoft 10.02.2011
Weil es darum nicht geht. Aber es dürfen halt nur wenige Anforderungen an den Server-Admin gestellt werden. Stichwort Free Hosting. Bitte keine Diskussion in die Richtung, ist keine Anforderung von mir, sondern kommt von Sales ;)
DaSpors 11.02.2011

Stelle deine Php-Frage jetzt!