Discussion:
Kommunikation mit dem Autoloader
(zu alt für eine Antwort)
Stefan+ (Stefan Froehlich)
2022-05-06 20:46:58 UTC
Permalink
Einmal eine etwas ungewöhnlichere Anforderung: Ich habe ein
Prüf-Programm, das über den abstract syntax tree PHP-Code auf (vor
allem) korrekte Klassen- und Konstantennamen prüft. Das funktioniert
so weit ganz gut, beim Überarbeiten und der Umstellung von
echo-Ausgaben auf ein Sammeln der Fehlermeldungen in einer
Collection ist nun aber ein Problem aufgetreten:

Das Programm hängt einen eigenen Autoloader ans Ende der Chain;
im Code gefundene Klassen werden nachgeladen,

#v+
is_subclass_of($fqcn, 'foo');
#v-

und wenn das die regulären Autoloader nicht schaffen, erzeugt die
Software in ihrem eigenen "Autoloader" zuerst ein

#v+
eval ("namespace $root$namespace; class $class {}");
#v-

um den Compiler glücklich zu machen und gibt danach eine
Fehlermeldung nach stdout aus. Nun hätte ich diese Meldung in
Zukunft aber gerne in der Software beim is_subclass_of(). Wie
könnte ich sie dorthin bekommen?

Servus,
Stefan
--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Geht nicht!? Gibt's nicht! Stefan.
(Sloganizer)
Arno Welzel
2022-05-09 10:32:54 UTC
Permalink
Post by Stefan+ (Stefan Froehlich)
Einmal eine etwas ungewöhnlichere Anforderung: Ich habe ein
Prüf-Programm, das über den abstract syntax tree PHP-Code auf (vor
allem) korrekte Klassen- und Konstantennamen prüft. Das funktioniert
so weit ganz gut, beim Überarbeiten und der Umstellung von
echo-Ausgaben auf ein Sammeln der Fehlermeldungen in einer
[...]

Zu dem konkreten Problem kann ich leider nichts beitragen.

Aber eine Gegenfrage: was spricht gegen php-cs oder psalm. Ersteres kann
man auch nutzen um eigene Regeln prüfen zu lassen.

Siehe dazu z.B.:

<https://stackoverflow.com/questions/54881514/phpcs-enforce-class-name-case-when-instantiating>
--
Arno Welzel
https://arnowelzel.de
Stefan+ (Stefan Froehlich)
2022-05-09 12:37:45 UTC
Permalink
Post by Arno Welzel
Post by Stefan+ (Stefan Froehlich)
Einmal eine etwas ungewöhnlichere Anforderung: Ich habe ein
Prüf-Programm, das über den abstract syntax tree PHP-Code auf
(vor allem) korrekte Klassen- und Konstantennamen prüft. Das
funktioniert so weit ganz gut, beim Überarbeiten und der
Umstellung von echo-Ausgaben auf ein Sammeln der Fehlermeldungen
[...]
Zu dem konkreten Problem kann ich leider nichts beitragen.
Ich hab's vorerst einmal durch eine globale Variable gelöst. Das mag
nicht der Inbegriff an Eleganz sein, aber da es ohnehin nur
Prüf-Code ist...
Post by Arno Welzel
Aber eine Gegenfrage: was spricht gegen php-cs oder psalm.
Ersteres kann man auch nutzen um eigene Regeln prüfen zu lassen.
<https://stackoverflow.com/questions/54881514/phpcs-enforce-class-name-case-when-instantiating>
Zunächst einmal vor allem, dass ich es nicht kannte :)

Soweit ich das überblicke, wird hier aber auch nicht auf die
Existenz von Konstanten geprüft, sondern lediglich auf Einhalten der
Namenskonventionen (und da sähe es bei mir leider traurig aus).

Mein Code wird analog zur zu prüfenden Software aufgerufen und teilt
daher deren Infrastruktur, insbes. den Autoloader. Dadurch ist der
im vorherigen Posting beschriebene Trick mit eval() überhaupt erst
möglich, das wird für ein externes Tool schwierig bis unmöglich
sein.

Servus,
Stefan
--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Stefan, mit dem mächtigen Gefühl der Lust.
(Sloganizer)
Loading...