[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • Redaxo Klassenmethoden non-static
Seite 1 von 1

Redaxo Klassenmethoden non-static

Verfasst: 23. Mär 2013, 19:36
von martinpet
Hi,

als ich etwas durch die Redaxoklassen stöberte, ist mir aufgefallen, dass die Klassenmethoden alle ein auskommentiertes "public static" haben. Natürlich lassen sich diese Methoden trotzdem statisch aufrufen, allerdings ist das um ca. 300% langsamer, als eine statisch deklarierte Methode ebenso aufzurufen.

Einfach mal ein Beispiel wäre: class.oocategory.inc.php Zeile Zeile 96

Code: Alles auswählen

/*public static*/ function getRootCategories
Gibt es einen Grund, wieso die statische Deklaration der Methoden auskommentiert ist?

Re: Redaxo Klassenmethoden non-static

Verfasst: 23. Mär 2013, 20:44
von Xong
Hi martinpet!
martinpet hat geschrieben:Gibt es einen Grund, wieso die statische Deklaration der Methoden auskommentiert ist?
Abwärtskompatibilität zu Uralt-PHP-Versionen.

Re: Redaxo Klassenmethoden non-static

Verfasst: 24. Mär 2013, 10:35
von RexDude
...und da REDAXO 4.5 (http://www.redaxo.org/de/forum/neuigkei ... 18916.html) nur noch ab PHP 5.3 läuft, konnte das nun korrigiert werden: https://github.com/redaxo/redaxo4/blob/ ... nc.php#L96

danke übrigens für den hinweis. mir persönlich war bis jetzt noch nicht bewusst das es hier ein performanceunterschied gibt.

Re: Redaxo Klassenmethoden non-static

Verfasst: 24. Mär 2013, 19:57
von martinpet
@xong: na dann steht mir ja nichts mehr im Wege, das bei meiner Installation zu korrigieren. :D

@rexdude: Gut zu wissen, dass es in 4.5 gefixt ist.
Im Prinzip läuft alles, was E_NOTICES auslöst langsamer, auch wenn die eigentliche Ausgabe von E_NOTICES unterdrückt ist, da die notice auch im Hintergrund getriggert wird und so "Arbeit" anfällt.

Grüße aus Mainz
Martin

Re: Redaxo Klassenmethoden non-static

Verfasst: 24. Mär 2013, 20:22
von martinpet
Und wer über eine Bash verfügt kann das Redaxoweit auf die Schnelle so korrigieren:
(Wie immer: auf eigene Verantwortung ausführen bzw. nur wenn man genau weiss was man da tut 8) )

Code: Alles auswählen

# Im "redaxo/" Verzeichnis ausführen
find ./ -regextype posix-extended -regex '.*\.php$' -print0 | \
xargs -0 sed -r -i 's/(.*\/\*\s*)(public static)(\s*\*\/)/\2/g'
HTH
Grüße aus Mainz
Martin