Wie übergebe ich Daten in PHP objektorientiert?

11

Selbst wenn ich mit einem MVC-Framework (z. B. CodeIgniter) arbeite, greife ich regelmäßig auf die Übergabe verschachtelter Arrays anstelle von Objekten zurück.

Dies folgt nicht gut meinem Verständnis von objektorientiert. Wenn ich zum Beispiel den Code nach Java portieren würde, würde ich nicht davon träumen, Arrays (oder Vektoren oder was auch immer) so herumzugeben.

Ich habe mich gefragt, ob dies der geeignete Weg ist, um mit Daten umzugehen. Gibt es einen Grund, warum Arrays in PHP so weitergegeben werden oder warum Objekte nicht verwendet werden? Was ist der beste Weg, um Daten weiterzugeben?

Matthew
quelle

Antworten:

8

Verwechseln Sie Javas OO nicht mit PHPs. Java ist eine einzige Paradigmensprache, was bedeutet, dass es nur OO macht. PHP hingegen ist eine Multi-Paradigmen-Sprache. Sie können entweder funktionale Programmierung oder OO oder beides durchführen.

Jetzt gibt es keine "schlechte" Implementierung von OO. Javas OO ist keine endgültige Implementierung, der jede andere Sprache folgen sollte oder muss. Es gibt einige definitive Konzepte, und beide Sprachen implementieren sie vollständig auf ihre eigene Weise (Java von Anfang an, PHP seit Version 5).

Um Ihre Frage zu beantworten: Was CI macht und was Sie damit machen, ist in der PHP-Welt richtig. Die Arrays von PHP sind eine der flexibelsten und nützlichsten Strukturen, und es ist eigentlich eine gute Sache, Arrays über Objekten zu verwenden, wenn Ihre Daten nur Informationen sind (keine Logik mit sich führen). Vollständiger OO-Code ist nicht dasselbe wie "nur OO-Code".

Wenn Sie mit PHP beginnen, verwenden Sie Java als Referenz für gute OO-Praktiken, aber beschränken Sie Ihr Verständnis von PHP nicht, da "Java es anders macht". Sie können wirklich beides vermasseln, das Paradigma wird Sie nicht retten, wenn Sie die Konzepte nicht verstehen.

Wenn Sie Java auf jeden Fall mehr nach Ihren Wünschen finden (als persönliche Präferenz), schauen Sie sich Ruby für die Webentwicklung an, sie sind etwas enger miteinander verwandt.

Yannis
quelle
Warum sollten wir Java OO nicht mit PHP OO verwechseln? Sie sind ziemlich gleich, außer dass PHP einen nativen Array / Hash-Datentyp hat.
Martin Wickman
Die Implementierungen sind ziemlich ähnlich. Ich bezog mich darauf, wie sie in beiden Sprachen verwendet werden.
Yannis
Ich habe ein Problem in OOP. Ich möchte ein OOP-Design für eine Anwendung (PHP-Basis) erstellen, bei der ein Objekt von anderen Objekten abhängt. Wie gehe ich in PHP damit um? Bitte helfen Sie mir ...
Imran Khan
Beispielszenario: Hotelobjekte haben Raumobjekte, wobei ein Raumobjekt Datumsobjekte haben muss ... und ein Datumsobjekt Preise für Personentypen haben. Nun, wie man diese Art von Szenario in PHP nach OOP-Basis handhabt (weil es große Daten gibt, die auf jeder Ebene verarbeitet werden müssen).
Imran Khan
@Walter ich warte auf deine Antwort .... bitte hilf mir.
Imran Khan
2

Die Verwendung von Objekten anstelle von Arrays, nur weil es sich um Objekte handelt, ist kein OO-Paradigma, sondern nur persönliche Vorlieben :)

Objects bietet eine praktische Code-Vervollständigung in IDE, Schnittstellen (Typhinweise) und Vererbung können verwendet werden.

Wenn Sie Objekte anstelle von Arrays verwenden möchten, weil Sie Vorteile sehen - verwenden Sie sie, aber wenn Sie sie nur verwenden möchten, weil es sich um Objekte handelt - verschwenden Sie keine Zeit mit diesem Refactoring :)

OZ_
quelle
" Nutzungsobjekte wie Arrays benötigen mehr Speicher und CPU. " Dies ist nicht (immer) wahr. Ein Objekt, das dieselbe Datenmenge mit einem Array enthält, belegt fast genau dieselbe Speichermenge.
Yannis
@Yannis Rizos, ja, Objekte können sogar weniger Speicher verbrauchen, bearbeitet.
OZ_
Es ist nicht nur so, dass sie weniger Speicher verwenden können, sondern auch, dass ihre Speichernutzung irrelevant ist, da sie im Vergleich zu anderen Aspekten der Speicherleistung des Systems und den Vorteilen der Verwendung von Objekten trivial ist. Wenn wir uns so sehr um die Speichernutzung kümmern würden, würden wir niemals Objekte verwenden. Was uns wichtig ist, ist, dass Objekte uns bessere Werkzeuge geben, um über Systeme nachzudenken und sie zu konstruieren.
Rein Henrichs
@Rein Henrichs, ich weiß es, danke. Deshalb wurden alle Wörter über "Erinnerung" aus meiner Antwort entfernt. Ich versuche nicht, dumme Optimierungen vorzunehmen, aber ich bin sicher, dass dies objects just because they are objectskein Grund für ein Refactoring ist :) Lesen Sie meine Antwort, nicht nur Kommentare.
OZ_
fair genug, kommentierte ich vor den Änderungen.
Rein Henrichs
1

In einem OO-System werden Daten nicht wirklich weitergegeben - Sie geben Objekte weiter . Der Unterschied besteht darin, dass Objekte sowohl Verhalten als auch Daten enthalten. Deshalb nennen sie es objektorientiert und nicht datenorientiert.

Solange Sie kein Verhalten mit Ihren Daten benötigen, sind einfache alte PHP-Arrays genauso gut (oder schlecht, je nach Ihrer Sichtweise) wie Wertobjekte.

Martin Wickman
quelle
0

Ich denke, dies ist nur eine Frage der Anpassung - es gibt viele Implementierungen von "Objekten" in der Programmierung - Python und Javascript haben auffallend unterschiedliche Eigenschaften. PHP OO ist wohl ein Hack - PHP-Arrays sind keine "Objekte" im herkömmlichen Sinne - aber sie dienen einem offensichtlichen Zweck. Wenn Sie nicht möchten, dass die Daten ein benutzerdefiniertes VERHALTEN haben, warum sollten Sie dann ein Objekt verwenden?

BEARBEITEN:

re: unveränderliche Wertobjekte

http://bradley-holt.com/2010/09/immutable-value-objects-in-php/

Sunwukung
quelle
Um den Daten eine zuverlässige Struktur zu geben. Ja, ich kann eine Funktion erstellen, die ein bestimmtes Format / Verschachtelung eines Arrays ausgibt, aber wer sagt, dass ich keine andere Funktion schreibe, die es geringfügig ändert und dann weitergibt?
Matthew
1
Sicher - dann benötigen Sie ein Objekt zum Schutz des Variablenzugriffs - da es beispielsweise keine PHP-Entsprechungen für Python-Tupel gibt. Aber los geht's - Sie haben das Problem definiert, Sie müssen nur die Konstrukte verwenden, die der Sprache zur Verfügung stehen ... oder einfach lernen, mit ihren "Macken" zu leben. Ich habe meinem ersten Beitrag einen Link hinzugefügt, der eine interessante Diskussion des Problems enthält.
Sunwukung