PHP Projekte richtig planen

Guten Abend Community

Ich mache mir schon seit einiger Zeit Gedanken darüber, wie ich am Besten meine zukünftige PHP-Projekte (besser) planen kann.

Seit rund 3-4 Monaten programmiere ich hauptsächlich nur noch Objekt orientiert. Also mit Klassen usw. Ohne OOP ist es glaube ich sogar schwierig einen effektiven Plan für ein Projekt zu erstellen.

Ich dachte, ich mache mir zuerst Gedanken über die Ordner Struktur. Z.B:

Mein Projekt
-- classes
---- mysq.class.php
---- template.class.php
---- core.class.php
-- includes
---- config.inc.php
---- lang.inc.php

usw.

Beim zweiten Schritt dachte ich, sollte man sich festlegen für welche PHP Version man sein Projekt schreiben möchte.
Falls man die Abwärtskompitabilität gewährleisten will/muss, sollte man darauf achten, dass man keine Funktionen verwendet die nur ab PHP 5 verfügbar sind. (Bitte verbessern falls ich hier was falsches geschrieben habe :))

So, jetzt als dritter Schritt könnte man überlegen, ob es sich lohnt z.B. eine MySQL Klasse zu schreiben. Falls das Script in vielen Funktionen Daten sendet oder ausliest, lohnt es sich bestimmt.

Dannach könnte man sich überlegen wie man die Ausgabe machen könnte. Mit Templates vielleicht? Oder einfach HTML und PHP vermischen?

Nun, wie ich gerade beim Schreiben bemerke, habe ich schon vergessen dass ich bereits eine Ordnerstruktur angelegt habe. Eigentlich kann ich erst nachdem ich diese Fragen mir selber beantwortet habe, eine ordentliche Ordnerstruktur anlegen...

Also wie man sieht fehlen mir einfach die Ideen und die nötige Erfahrung dazu.

Ich hoffe jemand kann mir gute Tipps geben wie ich meine PHP-Projekte besser planen kann :)

Ich habe auch schon darüber gelesen, dass manchen diese Mind Maps helfen. Doch auch da stelle ich mir die Frage, wie man damit ein PHP Projekt planen kann auf eine einfache Art und Weise.

Einen schönen Abend
 
Die Ordnerstruktur kann vom verwendeten Framework abhängen. Erstellt man z.B. ein Projekt mit Zend Framework hat man recht klar vorgegebene Ordnerstrukturen, die sich am MVC orientieren. Es gibt also Ordner für die Applikation, zusätzliche Bibliotheken und HTML-Kram/Templates und im Applikationsordner sind dann Unterordner für Controller, Views, Models etc.. Bei einer Projektplanung sollte man also erstmal entscheiden: Welche Hilfsmittel / Frameworks / Libraries etc. sollen genutzt werden?

Die zu verwendende PHP-Version festzulegen ist sicherlich sinnvoll. Aber schlag dir die Abwärtskompatibilität aus dem Kopf. Gerade bei PHP kommt dabei nur grauenvoller Code raus. Sollte ein Framework zum Einsatz kommen, sollte auch diesbezüglich definiert werden welche Version verwendet wird.

Und nein... du solltest keine eigene MySQL-Klasse schreiben. Jedes anständige Framework hat im Normalfall bessere SQL-Schnittstellen, die nicht nur auf MySQL begrenzt sind, an Bord als jeder Einsteiger sie schreiben könnte.

Mein Tipp für dich: Schau dir mal Zend Framework an. Da wirst du zu Objektorientierung gezwungen, zusätzlich lernst du dich an Model-View-Controller(MVC)-Modelle zu halten und du wirst staunen wie simpel SQL damit wird. Einfach einen Mapper für eine Tabelle erstellen und SQL-Abfragen schön objektorientiert zusammenschrauben. Und plötzlich sieht eine SQL-Abfrage dann so aus:

Code:
	public function fetchAll()
	{
		$resultSet = $this->getDbTable()->fetchAll();
		$entries = array();
		foreach ($resultSet as $row) {
			$entry = new Application_Model_Visnews();
			$entry->setId($row->id)
						->setText($row->text)
						->setDate($row->date);
			$entries[] = $entry;
		}
		return $entries;
	}

Und schon aus den Namen der Klassen kannst du die Ordnerstruktur ableiten. Application_Model_Visnews = /application/Model/Visnews.php

Wenn du dir Zend Framework mal angeschaut hast, werden sich die meisten deiner Fragen vermutlich ganz von allein in Luft auflösen. ;)

Edit: Achja... Die Ordnerstruktur bei Projekten auf Basis von Zend Framework wird bereits bei der Projekterstellung mit dem Tool 'zf' erstellt und Basis-Klassen wie z.B. die Bootstrap-Klasse werden bereits angelegt.
 
Die Ordnerstruktur kann vom verwendeten Framework abhängen. Erstellt man z.B. ein Projekt mit Zend Framework hat man recht klar vorgegebene Ordnerstrukturen, die sich am MVC orientieren. Es gibt also Ordner für die Applikation, zusätzliche Bibliotheken und HTML-Kram/Templates und im Applikationsordner sind dann Unterordner für Controller, Views, Models etc..

Das Zend-Framework implementiert den PSR-0 Standard für Autoloader. Dieser definiert eine Ordnerstruktur anhand von Namespaces.

Genaueres dazu unter: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

Und nein... du solltest keine eigene MySQL-Klasse schreiben. Jedes anständige Framework hat im Normalfall bessere SQL-Schnittstellen, die nicht nur auf MySQL begrenzt sind, an Bord als jeder Einsteiger sie schreiben könnte.
Unter Plain-Old PHP wären m.E. PHP Data Objects zu bevorzugen.

Mein Tipp für dich: Schau dir mal Zend Framework an.
Ich arbeite derzeit mit Symfony2 und werde nie wieder zurückschauen.

Dannach könnte man sich überlegen wie man die Ausgabe machen könnte. Mit Templates vielleicht? Oder einfach HTML und PHP vermischen?
Hier scheiden sich die Geister. Ich persönlich habe mit Twig meine Wunschtemplatingengine gefunden. Vgl. Benchmarking

Natürlich lohnt es sich, Gedanken über die grundlegende Sturktur eines Web-Projekts zu machen. Allerdings würde ich dir (wie Bitmuncher) ans Herz legen, ein Framework zu evaluieren. Die geeignete Wahl hängt vom Einsatzzweck ab.
Bei der Planung einer Software soll allerdings auch das Stichwort Projektmanagement genannt werden. :rolleyes:
 
Vielen Dank für die Antworten.

Ich arbeite eigentlich mit dem Framework Codeigniter.
Meine Frage war eigentlich eher wie ich ein "kleineres" PHP Projekt planen könnte. Nicht auf einem PHP Framework basierend und ohne grosse Sachen wie Smarty oder ähnliches.

Einfach etwas schmales, kleines. Eine eigene kleine MySQL Klasse und eine Template Klasse vielleicht. Nicht von einem Framework.

Entschuldigung wenn ich micht vielleicht falsch ausgedrückt habe.. oder vielleicht sind Eure Antworten zu professionell noch für mich.

Ich würde einfach gerne wissen wie man ein Projekt am Besten planen kann (Z.B. als MindMap) und wie ich da am besten vorgehe.

Mit freundlichen Grüssen
 
Üblicherweise geht man in der Planung einer Webapp so vor:

1. Man definiert die Use-Cases. In diesen wird die geplante Funktionalität definiert. Also... Es braucht eine Startseite mit Inhalt XY. Es braucht einen Benutzer-Login. Es braucht eine Benutzer-Registrierung. Es braucht Email-Notifications. User müssen ihr Passwort ändern können. usw. usf. Jede Kleinigkeit, die ein Nutzer machen kann, wird definiert.

2. Man definiert Wireframes für die Use-Cases. Also welche Interfaces/Seiten muss es geben um die Use-Cases umzusetzen und was muss auf diesen Seiten angezeigt werden sowie welche interaktiven Elemente (Buttons, Eingabefelder usw.) muss es geben.

3. Man definiert wie man das Projekt umsetzt (modular, simple Klassen-Struktur, MVC usw.) und definiert welche Klassen man benötigt, welche Input-Daten diese bekommen können und was sie auswerfen können müssen.

4. Man definiert eine Ordner-Struktur. Dabei sollte darauf geachtet werden, dass eine klare Trennung zwischen statischen Inhalten und Code existiert. Wie du die Ordner-Struktur aufbaust hängt aber sehr davon ab wie du den Code aufbaust. Bei einer Orientierung an MVC-Strukturen wirst du sicherlich Unterordner für Views, Models und Controller haben wollen. Bei einer modularen Aufteilung soll vermutlich jedes Modul einen Unterordner haben. Und bei simplen Klassenmodellen kann man einfach einen einzelnen Ordner für die Klassen verwenden.

DEN Weg ein Projekt zu planen gibt es aber nicht. Der genannte ist in der kommerziellen Entwicklung aber üblich. Man muss einfach ein paar Erfahrungen sammeln und selbst entscheiden welche Arbeitsweise / Art der Projektplanung einem selbst gut liegt. Es gibt durchaus auch Leute die so gut programmieren, dass sie Projekte gar nicht planen. Sie legen lediglich eine grundlegende Ordner-Struktur und Namensgebung fest und legen dann los. Andere machen einen Prototyp und entscheiden sich erst dabei für eine endgültige Projekt-Struktur.

Dennoch würde ich Einsteigern auch bei kleinen Projekten zu einem Framework raten, da diese zumeist typische Sicherheitslücken verhindern.
 
Zurück
Oben