Namenskonventionen und Verzeichnisstruktur in PHP Projekten

Anders als bei Java oder C# gibt es in PHP keine zentralisiert vereinheitlichten Namenskonventionen. Es haben sich jedoch einige „Best Practices“ oder „Standards“ etabliert. Diese Bezeichnungen sind jedoch irreführend, denn es gibt teilweise gegensätzliche „Standards“.

Man kann sich also gewissermaßen seinen eigenen Weg aussuchen. Wichtig ist nur, dass man dabei konsistent bleibt. Denn es wird schnell frustrierend, wenn man ständig nachsehen muss, ob die Variable nun „$user_login“ oder „$userLogin“ hieß.

An dieser Stelle möchte ich einmal die Standards vorstellen, welche ich in meinem Code verwende. Sieh es als Inspirationsquelle. Denk aber daran, dass du dich ggf. dem Standard deines Teams oder deines Auftraggebers anpassen musst. Auch falls du vorhast, deinen Code einem Open-Source-Projekt beizusteuern, ist es unerlässlich, dass du dich entsprechend den vorgegebenen Standards anpasst. Ähnliches gilt bei der Verwendung von Frameworks. Diese geben häufig eigene Konventionen vor. Davon abzuweichen, führt später sehr wahrscheinlich zu Frust und Problemen.

Variablen und Eigenschaften

Variablennamen sollten zunächst immer mit einem Kleinbuchstaben beginnen, zum Beispiel „$user“. Besteht der Bezeichner aus mehreren Wörtern, ist die Camel Case Schreibweise empfehlenswert. Hierbei wird jedes neue Wort mit einem Großbuchstaben am Anfang geschrieben.

$userName = 'Hugo';
$userPassword = '12345';

Das gleiche gilt für Eigenschaften von Klassen:

class User {
   public $userName = 'Hugo';
   public $userPassword = '12345';

   ...
}

Konstanten

Konstanten werden in PHP immer in Großbuchstaben geschrieben. Bei Bezeichnern, die aus mehreren Worten bestehen, trennt man diese mit einem Unterstrich.

define('TABLE_NAME', 'tbl_user');

Klassennamen

Klassennamen beginnen immer mit einem Großbuchstaben. Anschließend verwendet man die bereits bei Variablen gebräuchliche Camel Case Schreibweise.

class CartController {
   ...
}

Dateinamen

Dateinamen verwenden in der Regel die Schreibweise wie Variablen. Sie beginnen mit einem Kleinbuchstaben und verwenden bei mehreren Wörtern den Camel-Case-Stil.

Wenn eine Datei jedoch eine Klasse enthält, gibt es noch ein bisschen mehr zu beachten. Zunächst einmal sollte der Name der Datei auch dem Namen der enthaltenen Klasse entsprechen. Dann sollte der Name der Datei auch die Schreibweise für Klassen übernehmen. Entsprechend beginnt dann auch der Dateiname mit einem Großbuchstaben.

index.php
config.php

CartController.php // Enthält die CartController-Klasse
Database.php       // Enthält die Database-Klasse


Datei- & Verzeichnisstruktur

Die Verzeichnisstruktur eines PHP Projekts hängt an sich stark vom Projekt ab. Ich verwende aber oft und gerne das unten gezeigte Tamplate für kleinere bis Mittelgroße Projekte. Hierbei ist die Ordnerstruktur am häufig verwendeten Model-View-Controller-Pattern (MVC) angelehnt.

/project
  /php
    /controller
    /database
    /templates
  /public
    /images
    /scripts
    /styles
    index.php
  /config
  /lib

project
Das ist das Projektverzeichnis.

php
Im Verzeichnis php liegt der Haupt-Anwendungscode. Er ist entsprechend dem MVC Pattern in weitere Unterordner unterteilt.

controller
Das controller-Verzeichnis enthält die Controller-Dateien / -Klassen des Model-View-Controller-Patterns (MVC).

database
Im Ordner database befinden sich die Model-Klassen des Model-View-Controller-Patterns (MVC). Also Klassen welche den Datenbankzugriff für einen entkoppelten Zugriff mit einer einfachen API abstrahieren.

templates
Das templates-Verzeichnis enthält die Views des Model-View-Controller-Patterns (MVC). Das sind zum einen die vollständigen Templates für ganze Seiten, aber auch einzelne Seitenübergreifende Komponenten, wie zum Beispiel Header-Bereiche, Sidebars, und so weiter.

public
Der public-Ordner enthält alle öffentlich zugänglichen Dateien, also z.B. Stylesheets und JavaScripts, aber vor allem auch die index.php Datei, sowie andere öffentlich ansteuerbare Seiten. Von hier aus kann das weitere Routing vorgenommen werden. Alle anderen Ordner sollten nicht über den Browser aufrufbar sein. Dies kann man erreichen, indem man den Zugriff z.B. mittels .htaccess einschränkt. Bei einigen Hosting-Anbietern kann die Zugriffsrechte auch über ein Kontrollpanel steuern.

images
Das Verzeichnis images enthält alle Bilder des Projekts. Auch hochgeladene Bilder werden hierin gespeichert. Sollte die Website auch andere Medientypen enthalten (Sounds / Musik / Videos, etc.), dann bietet es sich an den Ordner auf dieser Ebene „media“ zu nennen und für die einzelnen Datentypen spezifische Unterverzeichnisse zu verwenden.

scripts
Im scripts-Verzeichnis liegen die JavaScript Files des Projekts.

styles
Im Ordner styles liegen die CSS-Dateien des Projekts.

config
Der config-Ordner enthält Dateien die zur Konfiguration des Projekts dienen. Zum Beispiel Dateien mit Zugangsdaten für die Datenbank oder Konfigurationsdateien für die jeweilige Server-Umgebung oder ähnliches.

lib
Der Ordner library enthält PHP Skripte und Klassen die Projektübergreifend einsetztbar sind. Das können diverse Hilfsklassen z.B. mit Validierungs-Funktionen oder ähnlichem sein.