Funktionen vs. statische Methoden

Frezl

Erfahrenes Mitglied
Hallo allerseits,

ich habe ein kleines Framework erstellt, in das alles einfließt, was ich in den letzten Jahren entwickelt habe. Sozusagen ein Werkzeugkasten, damit ich nicht bei jedem Projekt bei Null beginnen muss. In diesem FW trenne ich bis jetzt zwischen Klassen und reinen Funktionen, die auch in zwei verschiedenen Ordnern liegen. Für die Datenbankanbindung benutze ich z. B. eine Klasse, für einfachere Aufgaben wie das Schreiben von Logfiles habe ich mir eine Funktion geschrieben.

Neulich habe ich mir die Frage gestellt, ob ich die Trennung zwischen Klassen und Funktionen aufheben und stattdessen mit statischen Klassenmethoden arbeiten sollte. Die meisten FWs, die sich objektorientiert bezeichnen, machen das so. Aber wo genau liegt der Vorteil? Ist die Durchmischung von statischen Methoden mit "richtigen" Objektmethoden überhaupt sinnvoll?

Viele Grüße
Frezl
 
Ich arbeite eigentlich nur noch mit Methoden.
Ich finde es ist einfach übersichtlicher und schöner programmiert. Damit lassen sich verschiedene Funktionen zusammen gruppieren.
 
eigentlich ist das verwenden von Klassen als funktionscontainer ein Missbrauch. Aber vorallem in zB view-helpern wird gerne mit statischen Methoden gearbeitet, weil der objektkontext eben nicht sinnvoll ist dort. Was man da bevorzugen sollte: KA.
 
Die eigentliche Frage sollte doch vielleicht lauten: Warum sind noch nicht mehr Funktionalitäten als Objekte gekapselt? In vielen Fällen ist das sinnvoll.

Der Vorteil ist, dass es dazu einlädt, sog. Hirn-Hygiene zu betreiben. Nach dem Motto: Wo gehört das dazu? Kann man das vereinfachen? Wo habe ich noch nicht genügend dokumentiert?

Nicht zu letzt kann man mit Klassen bzw. deren Objekten mit einem Umstand von PHP den viele als Vorteil manche als Nachteil bezeichnen, aufräumen: Typsicherheit.
 
Vielen Dank für eure Antworten!

Dass man sich eher über die Sortierung der Funktionen Gedanken macht, wenn man sie in Objekten gruppiert, leuchtet mir ein. Allerdings ist das bei mir auch der Fall, da ich die Funktionen thematisch geordnet in einzelne Dateien packe. Also z. B. functions.debug.inc.php für alle Funktionen, die ich fürs Debugging brauche.

Auf einen Nachteil von (statischen) Methoden bin ich bei der Recherche im Internet gestoßen: Die Ausführungsgeschwindigkeit ist langsamer als bei normalen Funktionen. Ich habe das selbst mal ausprobiert und bin zu folgenden Ergebnissen für die Ausführungszeit gekommen:

function < static method < method of persistent object <<< object method

Der Zeitunterschied zwischen Funktionen und statischen Methoden ist sichtbar, aber sehr gering. Auch Objektmethoden bringen keinen großen Nachteil, wenn ich das Objekt einmal instanziere und dann die Methoden _sehr oft_ aufrufe. Einen großen Zeitnachteil habe ich allerdings, wenn ich ein Objekt instanzieren muss, um eine einzige Funktion daraus einmal auszuführen. Dann braucht der Aufruf beinahe doppelt so lang und obendrein brauche ich natürlich eine weitere Code-Zeile, die keine zusätzliche Funktion beinhaltet (außer eben das Objekt zu instanzieren, was aber nur Mittel zum Zweck ist).

Ich hab den Code zu meinem Benchmark angehängt, dann könnt ihrs selbst nachvollziehen. Getestet habe ich auf Apache/2.4.2 (Win32) OpenSSL/1.0.1c PHP/5.4.4 Server at localhost Port 80.

Etwas anderes macht mir aber noch Sorgen, wenn ich Objekte als Funktionssammlungen und "normale" Objekte habe: Ich sehe nicht mehr auf den ersten Blick, wie ich die Objekte aufrufen muss. Bei der Trennung Funktionen/Objekte ist das auf den ersten Blick klar. Hat da jemand Erfahrungen mit?

Viele Grüße
Frezl
 

Anhänge

  • bench_results.jpg
    bench_results.jpg
    43,2 KB · Aufrufe: 20
  • function_vs_method.zip
    1,3 KB · Aufrufe: 8

Neue Beiträge

Zurück