19 Stimmen

Lohnt sich der Einsatz von OOP in PHP?

Es gibt viele Debatten darüber, ob objektorientierte Programmierung gut ist oder nicht. Aber die Verwendung von OOP in Php ist langsamer. Wäre es ein guter Tausch zwischen prozeduraler Programmierung und schnellerer Geschwindigkeit und OOP mit langsamerer Geschwindigkeit (da Klassen jedes Mal, wenn eine Seite geladen wird, initiiert werden müssen und große Websites anfangen, langsam zu werden).

Noch wichtiger ist, wäre es gut, Sachen innerhalb einer Klasse zu verpacken und statische Funktionen zu verwenden oder wäre es besser, nur viele liegende Funktionen mit einem Präfix ex: wp_function() zu haben.

12voto

jakeboxer Punkte 3200

Wenn Sie sich wegen der Geschwindigkeit Sorgen um die Verwendung von OO mit PHP machen, brauchen Sie keine Angst zu haben: PHP ist eine rundum langsame Sprache. Wenn Sie etwas tun, das so prozessorintensiv ist, dass der Geschwindigkeitsverlust durch die Verwendung von Objekten ins Gewicht fällt, sollten Sie PHP überhaupt nicht verwenden.

Was die statischen Funktionen betrifft, so ist dies eine Designentscheidung, aber ich würde es vermeiden, Klassen zu erstellen, die ausschließlich aus statischen Funktionen bestehen. Es gibt wirklich keinen Vorteil gegenüber Präfixen, und die Verwendung eines Konstrukts, nur weil es da ist, ist keine gute Idee.

10voto

Tyler Carter Punkte 58971

Ja, es ist fast immer eine gute Idee, OOP zu verwenden. Das liegt daran, dass OOP ein Programmierstil ist, und Programmierstile lassen sich in den meisten Fällen leicht auf andere Sprachen übertragen.

Die Menschen verwenden keine Codierungsstile, weil sie eine bestimmte Sprache verwenden. Die Menschen verwenden Kodierungsstile, weil der Kodierungsstil gute Methoden bietet, um Dinge zu tun, die sie für wünschenswert halten. Solange die grundlegenden Elemente vorhanden sind (Vererbung, Klasseneigenschaften usw.), wird es daher immer praktikabel sein, in diesem Stil zu schreiben.

Nein, die Verwendung von prozeduralen Funktionen für den Zugriff auf sie ist wahrscheinlich keine gute Idee. Das liegt daran, dass Sie wahrscheinlich so etwas tun müssen, um den Zustand zu erhalten.

function myFunc()
{
    global $class;
    $class->doMethod();
}

function myFunc2()
{
    global $class;
    $class->doMethod2();
}

Dies ist eine schlechte Idee, da sie eine Menge globaler Zustände schafft.

6voto

symcbean Punkte 46489

Ich kann der Antwort von Chacha102 nicht zustimmen.

Eine angemessene Antwort auf diese Frage würde mehrere Bücher füllen - geschweige denn einen 20-zeiligen Beitrag hier.

Beide Ansätze haben ihre Vor- und Nachteile. Ich würde jedem, der sich als guter Programmierer bezeichnen möchte, empfehlen, umfangreiche Erfahrungen in prozeduraler, nicht-prozeduraler und objektorientierter Programmierung zu sammeln. Und auch Erfahrung mit verschiedenen Methoden wie SCRUM, Kaskade und RAD.

Was die Eignung von PHP für OO- und prozedurale Programmierung betrifft, so liegen die Wurzeln der Sprache sicherlich in der letzteren (aber beachten Sie, dass sowohl Java als auch ASP eher hybride als echte OO-Sprachen sind).

Ich neige dazu, prozeduralen Code zu schreiben, wenn ich etwas produzieren muss, das entweder sehr einfach ist oder dessen Verhalten genau definiert und vorhersehbar sein muss. Wenn ich jedoch komplexen Code schreibe, bei dem das Verhalten zur Laufzeit stark variiert, finde ich, dass OO in Bezug auf die Entwicklungszeit wesentlich effizienter ist - obwohl der Entwurf auf einer begrenzten Anzahl von Anwendungsfällen basiert.

Zu argumentieren, dass man immer prozeduralen Code schreiben sollte, weil er schneller läuft als OO-Code:

1) ist nicht unbedingt wahr 2) ignoriert völlig die relativen Kosten der Entwicklerzeit gegenüber den Hardwarekosten

wäre es gut, Dinge innerhalb einer Klasse zu verpacken und statische Funktionen zu verwenden

In Anbetracht der Tatsache, dass Namespaces jetzt in PHP zur Verfügung stehen, ist dies eine wirklich chaotische Art und Weise, um Namespace-Kollisionen zu vermeiden, und nichts, was ich empfehlen würde.

C.

6voto

Austen Hoogen Punkte 61

Die gleichen Argumente bezüglich der Leistung wurden seinerzeit auch bei Objective C und C++ vorgebracht. Die Antwort auf dieses Problem bestand darin, die Vorteile des verfügbaren Speichers und der Verarbeitungsleistung zu nutzen, die immer größer, besser und schneller werden.

Ja, OO benötigt mehr Ressourcen für die Ausführung. Aber die Vorteile der Verwendung von OO überwiegen die Hardwarekosten $$ (die wahrscheinlich unbedeutend sind) für die Unterstützung von OO-Anwendungen.

Es ist jedoch eine gute Sache, sich über die Leistung von Software Gedanken zu machen. Der Blick unter die Haube von prozeduralen oder OO-Programmen als Ausgangspunkt ist jedoch ein wenig fehlgeleitet. Sie müssen sich darauf konzentrieren, effizienten Code zu schreiben, egal ob prozedural oder OO (und beides ist relevant).

Denken Sie daran, dass PHP zwar nicht die schnellste Plattform auf dem Markt ist (Java zum Beispiel ist viel schneller), dass aber einige der am stärksten frequentierten Websites im Internet mit PHP betrieben werden: nämlich Facebook.

Wenn Sie noch Zweifel an PHP und OO haben, schauen Sie sich einfach Zend und Magento (basierend auf Zend) an. Magento ist eine SEHR ressourcenintensiven Plattform kann der Speicherverbrauch bis zu 36 MB pro Instanz betragen. Die Plattform selbst ist jedoch in der Lage, Millionen von Zugriffen zu verarbeiten. Das liegt daran, dass eine richtig konfigurierte Serverumgebung mit einer gesunden Portion Hardwareressourcen alle Vorteile des Einsatzes von OO weit über die Kosten des Servers selbst hinausgehen lässt. Aber in einer Welt der Cluster-Computer ist es - IMHO - klinischer Wahnsinn, die verfügbare Rechenleistung und den Speicher (verantwortungsvoll) nicht zu nutzen.

5voto

Dominic Barnes Punkte 27403

Meiner bescheidenen Meinung nach sollten PHP-Entwickler nicht versuchen, die ausschließlich eine Richtung. (prozedural vs. objektorientiert) In manchen Fällen braucht man nur ein paar globale Funktionen, in anderen Fällen ist es vorteilhafter, Objekte zu verwenden. Versuchen Sie nicht, alles in die eine oder andere Richtung zu zwingen. Seien Sie flexibel und verwenden Sie das, was in der jeweiligen Situation am besten funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X