php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack (1) Themen-Optionen Thema bewerten
  1 links from elsewhere to this Post. Click to view. #1 (permalink)  
Alt 16-04-2012, 02:14
vonHagen
 Registrierter Benutzer
Links : Onlinestatus : vonHagen ist offline
Registriert seit: Apr 2012
Beiträge: 6
vonHagen befindet sich auf einem aufstrebenden Ast
Post Wie geht man mit Klassen um

Guten (sehr früher) Morgen,

ich bin ein fleißiger Programmierer in Sachen PHP und habe mich nun damit abgefunden, dass OOP der bessere Weg ist ein etwas größeres Projekt zu realisieren. Eine Klasse zu schreiben und daraus Objekte zu erstellen ist ja sehr einfach. Das kann ich auch soweit alles. Nun habe ich eine, für die meisten von euch wohl sehr, simple Frage.

Ich weiß verdammt nochmal nicht wie man seine Klassen richtig aufbaut. Ab welchem Funktionsumfang es sich lohnt Klassen zu erstellen welche Methoden (Funktionen) die Klasse haben soll. Wie viel eine einzige Funktion machen sollte ( ob Sie nun etwas prüft UND in der Datenbank ändert oder ob es eine Funktion zum prüfen UND eine zum Ändern einiger Daten in einer Datenbank gibt ) und und und....

Nochmal zusammen gefasst.

  • Wie baut man ein System mit verschiedenen Klassen auf ?
  • Ab wann lohnt es sich MEHRERE Klassen zu schreiben ?
  • Was sollte eine Methode (Function) machen oder darf/sollte eine Methode auch mehrere Dinge erledigen ?
  • Welche Objektvariablen lohnen sich wirklich ?
  • Muss ich die Objekte ganz am Anfang vom Script erzeugen und dann damit arbeiten, oder mittem im Script da die Objecte erzeugen wo sie gebraucht werden ?
  • Lohnt sich eine Klasse für Sessions, ein Login, eine Registration oder die Zuweisung der ID ?
Das sind alles Fragen die ich mir immer wieder Stelle und ich selber noch nie eine Antwort gefunden habe. Manchmal stopfe ich wirklich ALLES in eine Klasse und manchmal erstelle ich für jeden, salopp gesagt, "Furz" eine Klasse.

Ich bitte einfach nur darum eure Erfahrungen Preis zu geben. Wie arbeitet Ihr mit Klassen. Wie arbeiten die Klassen untereinander. Und und und.


Ich hoffe ich werde in ein paar Stunden ein paar schöne Beiträge lesen die meinen PHP-Stil für immer prägen werden.
Mit Zitat antworten
  #2 (permalink)  
Alt 16-04-2012, 06:11
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

google: "PHP OOP Design Pattern, 2. Auflage"
__________________
Wir werden alle sterben
Mit Zitat antworten
  #3 (permalink)  
Alt 16-04-2012, 07:03
Benutzerbild von mermshaus mermshaus
 Registrierter Benutzer
Links : Onlinestatus : mermshaus ist offline
Registriert seit: Jun 2009
Beiträge: 451
mermshaus wird schon bald berühmt werden
Standard

Willkommen im Forum.

Ich würde empfehlen, dir ein größeres Projekt (Zend Framework oder Symfony etwa) anzusehen, um ein Gefühl dafür zu bekommen, wie Leute mit Klassen arbeiten, die relativ viel Zeit in ihr Design stecken. Da gibt es auch gute Dokumentation und sogar Bücher.

Zitat:
Wie baut man ein System mit verschiedenen Klassen auf ?
Das hängt von vielen Faktoren ab.

- Model?view?controller - Wikipedia, the free encyclopedia
- Hierarchical model?view?controller - Wikipedia, the free encyclopedia
- Software design pattern - Wikipedia, the free encyclopedia

- Dependency injection - Wikipedia, the free encyclopedia / Inversion of control - Wikipedia, the free encyclopedia
- Law of Demeter - Wikipedia, the free encyclopedia

- Professionelle Softwareentwicklung mit PHP 5

- …

Das musst du aber grundsätzlich nicht alles kennen, um OOP sinnvoll betreiben zu können. (Wobei, wenn ich die Liste der Muster so durchgucke… Doch, die meisten davon begegnen dir ständig – bewusst oder unbewusst.)

„Inversion of Control“ (in dem Zusammenhang das Factory-Pattern) und „Law of Demeter“ sind meines Erachtens wichtig. Und das EVA-Prinzip und die Begriffe Model, View und Controller und Front-Controller (= alles läuft über eine index.php.). Das Konzept von „Global state“ und warum man es vermeiden sollte (= IoC/DI > Singleton/Registry), füge ich persönlich noch hinzu. Und eine steile These: Object composition/Interfaces > Vererbung.

- EVA-Prinzip ? Wikipedia (Heißt in unserem Kontext im Grunde: Fang nich an, die Mitarbeiter-Liste an den Browser zu schicken, bevor du feststellst, dass die Firma „Existiert Nicht Productions“ und das Jahr 1251 nachgefragt sind. Das kriegst du mit MVC mitgeliefert.)

Das klingt nach einer Menge Holz, aber Vieles davon ist erschreckend logisch. Dependency Injection bedeutet zum Beispiel im einfachsten Fall…

PHP-Code:
$logger = new Logger();
$app = new Application($logger);

$otherLogger = new OtherLogger();
$app2 = new Application($otherLogger); // No problem here 
…statt:

PHP-Code:
class Application {
    
// ...
    
public function __construct() { $this->logger = new Logger(); }
    
// ...
}

$app = new Application(); 
Application ist im zweiten Fall abhängig von einer konkreten Logger-Implementation, während im ersten Fall lediglich ein Logger übergeben werden muss, der die Vorgaben einer Schnittstelle erfüllt. Eine Instanz welcher konkreten Klasse das ist, ist aber nicht festgelegt.

Faustregel dazu: Ein new-Schlüsselwort im Konstruktor ist falsch.

Extremer: new gehört einzig in Factories. (Zieht kaum jemand durch.)

PHP-Code:
class ApplicationFactory {
    public function 
createNewApplicationWithDefaultParts() {
        return new 
Application(new Logger());
    }

Zitat:
Ab wann lohnt es sich MEHRERE Klassen zu schreiben ?
Einfache Antwort: Sozusagen immer. Aber ganz schwer zu erklären. Du kennst vielleicht ERMs aus der relationalen Datenbanktheorie. Was du da als Entity definierst, ist praktisch immer auch ein eigenständiges Objekt. Models/Services, die die Business-Logik implementieren, sind dann ebenfalls eigenständige Objekte, die mit diesen Entities arbeiten. Hinzu kommen dann Hilfs-Objekte wie der bereits erwähnte Logger oder ein Cache oder ein Filter oder ein Output-Renderer. Da würde ich mir wirklich mal ein Framework (siehe ganz zu Anfang) anschauen.

Zitat:
Was sollte eine Methode (Function) machen oder darf/sollte eine Methode auch mehrere Dinge erledigen ?
Hängt davon ab, was du modellierst. Richtlinien: Vermeide Redundanz, vermeide unnötige Komplexität (ein, zwei Bildschirmseiten sollten für die meisten Methoden ausreichen). So was organisiert sich oftmals selbst, weil Dinge umständlich werden, wenn sie falsch sind. Die Erfahrung wirst du selbst machen.

Zitat:
Welche Objektvariablen lohnen sich wirklich ?
Die Frage verstehe ich nicht.

Zitat:
Muss ich die Objekte ganz am Anfang vom Script erzeugen und dann damit arbeiten, oder mittem im Script da die Objecte erzeugen wo sie gebraucht werden ?
Die Frage beantwortet sich im Grunde dadurch, dass du zu Beginn des Scripts noch nicht unbedingt wissen kannst, was alles gebraucht werden wird. Auch im Zuge der Kapselung einzelner Anwendungsteile ist die Antwort: dort, wo sie gebraucht werden.

Dass es Objekte gibt, die praktisch immer gebraucht werden (Logger, Nutzer-Objekt, Datenbank-Verbindung, …) und deshalb früh initialisiert werden müssen, dürfte auch nachvollziehbar sein.

Zitat:
Lohnt sich eine Klasse für Sessions, ein Login, eine Registration oder die Zuweisung der ID ?
Zend Framework oder Symfony (o. ä.) angucken. Die haben Antworten auf alle dieser Fragen.

Was sich lohnt, ist oftmals fallabhängig. Du wirst vermutlich schon manchmal auf den Einsatz einer DB verzichtet und Daten in einfache CSV-Dateien oder so gespeichert haben. So ähnlich ist es auch mit so was.

Ich nutze auch nicht gleich für alles das Zend Framework.

Was in der Hinsicht vielleicht noch ein Tip wäre, der dich nicht gleich mit 8 Millionen Dingen zuschüttet:

- Silex - The PHP micro-framework based on Symfony2 Components

Das ist ein Mini-Framework, das einige „anerkannte“ Konzepte umsetzt, ohne die aber gleich in 1000 Klassen zu verpacken.



So, das war jetzt die komprimierte Version von einigen Jahren Erkenntnisgewinn. Betrachte die Aussagen nicht alle als absolut. Viele der angeschnittenen Punkte lösen in einem Forum wie diesem sofort riesige Diskussionen aus, wenn man sie losgelöst diskutieren würde. Falls mich hier niemand korrigiert, liegt das einzig daran, dass niemand weiß, wo damit zu beginnen wäre.

PS: Schau dir hinreichend zeitig PHPUnit an. http://www.phpunit.de/manual/current/en/index.html

Geändert von mermshaus (16-04-2012 um 07:11 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 16-04-2012, 18:27
vonHagen
 Registrierter Benutzer
Links : Onlinestatus : vonHagen ist offline
Registriert seit: Apr 2012
Beiträge: 6
vonHagen befindet sich auf einem aufstrebenden Ast
Standard Danke

Vielen Dank für diese ausführliche und gut zu verstehende Antwort.

Dann werde ich mir mal die Links alle nacheinander ansehen und mir mal so ein FrameWork ansehen.

Auf bald.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
klassen, struktur


LinkBacks (?)
LinkBack to this Thread: https://www.php-resource.de/forum/php-developer-forum/102870-wie-geht-man-mit-klassen-um.html
Erstellt von For Type Datum
OOP in PHP - php.de This thread Refback 20-11-2012 22:01

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Kann man mit JavaScript auf eine Datenbank zugreifen, wie mit PHP? spam2008 HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 4 11-03-2008 20:42
Wie verwendet man PEAR und warum muss man es installieren ? compuboy1010 PHP Developer Forum 21 26-03-2004 18:36
Du Papa, wie schreibt man Sex - mit x oder mit ks ? Abraxax Out of Order 3 27-11-2003 08:42
wie verbindet man mehrere onload im body tag warum geht dies nicht? hwei HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 12 18-06-2003 15:07
Kann man Klassen auflisten? SteffL PHP Developer Forum 1 13-09-2002 08:26

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:02 Uhr.