Benutzer-Werkzeuge

Webseiten-Werkzeuge


dev:all:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
dev:all:start [10.08.2014 22:51] Manuela v.d.Deckendev:all:start [17.09.2014 04:27] Manuela v.d.Decken
Zeile 1: Zeile 1:
-====== Coding Standards ====== +[[dev:all:psr|{{:check.png?nolink&64 |Standards}}]] [size=2em]**[[dev:all:psr|Coding Standards]]**[/size] 
-[[dev:all:standards|Coding Standards]] +... für einige willkommenfür andere wiederum ein rotes Tuch
- +Dabei wollen Standards nicht vorschreibenwas und wie man programmiertSie sorgen einfach nur dafürdass Quellcode von unterschiedlichen Codern eben die selbe Basis benutztDass jeder problemlos den Code eines anderen lesen und -hoffentlich- auch verstehen kann und dass Quellcode unterschiedlicher Herkunft reibungslos zusammenspielt
-===== PHP Dateiformatierung ===== +---- 
- +[[dev:all:examples|{{:idea.png?nolink&64 |Standards}}]] [size=2em]**[[dev:all:examples|So funktioniert das...]]**[/size] 
-==== Allgemein ==== +... eine Sammlung von Codebeispielen, damit nicht jede/r das Rad neu erfinden muss, 
- +---- 
-Für Dateien mit der Endung *.php, welche nur PHP Code beinhalten oder mit PHP Code enden, ist der schließende Tag **?>** nicht zugelassen. Er wird weder vom Webserver noch von PHP benötigt und das Weglassen verhindert, dass versehentlich Leerzeilen in die Antwort eingefügt und dadurch eventuell vorzeitig Header gesendet werden.\\  +[[dev:all:devtools|{{:firstaid.png?nolink&64 |Standards}}]] [size=2em]**[[dev:all:devtools|Developer Tools]]**[/size] 
-Beginnt eine Datei mit PHP Code, so ist zwingend das öffnende **<?php** Tag in der ersten Spalte der ersten Zeile der Datei einzusetzen. +... werden immer wieder für diverse aufwändige und/oder wiederkehrende Aufgabe benötigtDiese kleine Werkzeugkiste soll Entwicklern bei Routinearbeiten etwas Entlastung bringen
-Textdateien (also nicht Binär-Dateien wie Bilder etc.) müssen grundsätzlich im UTF-8 Format ohne BOM (ByteOrderMark) abgespeichert werden.\\  +----
-Dieser Punkt ist vor allem bei Benutzern von Windows-Umgebungen explizit zu beachtenda unter Unix/Linux in der Regel UTF-8 sowieso Systemstandard ist+
-==== Einrücken ==== +
-Die Standardschrittweite des Tabulators ist auf 4 Leerzeichen einzustellen. Ein Einzug besteht grundsätzlich aus 4 Leerzeichen. Tabulatoren selbst sind an keiner Stelle erlaubt und sollten der Einfachheit halber vom Editor automatisch in jeweils 4 Leerzeichen umgewandelt werden. +
-==== Maximale Zeilenlänge ==== +
-Die Zielzeilenlänge ist 80 Zeichen. Entwickler sollten jede Zeile ihres Codes unter 80 Zeichen haltensoweit das möglich und praktikabel istTrotzdem sind längere Zeilen in Ausnahmefällen erlaubt. Die maximale Länge einer PHP Codezeile sollte 130 Zeichen jedoch nicht überscheiten. +
-==== Zeilenbegrenzung ==== +
-Die Zeilenbegrenzung folgt der Unix Textdatei Konvention. Zeilen müssen mit einem einzelnen Zeilenvorschubzeichen(**LF**) enden. Zeilenvorschubzeichen werden durch eine ordinale 10oder durch 0x0A (hexadezimal) dargestellt.\\ +
-:!: **Beachte:** Benutze nicht den Wagenrücklauf (**CR** / 0x0D) wie in den Konventionen von Apple oder die Kombination aus Wagenrücklauf und Zeilenvorschub (**CRLF** / 0x0D, 0x0A) wie im Standard für Windows angegeben+
-===== Namens-Konventionen ===== +
- +
-==== Allgemeines ==== +
- +
-WebsiteBaker übernimmt auch hier weitgehendst die Standards von Zend in einer an die Besonderheiten von WB angepassten Form. Die wichtigste Abweichung findet sich im Aufbau der Suchpfade für die Dateien. In späteren Versionen wird auch hier eine weitere Annäherung an Zend erfolgen. +
-<blockquote>{{:info.png?nolink&32 |Hinweis}} +
-**Hinweis:** +
-Die strikte Einhaltung dieser Konventionen ist zwingend erforderlich, damit es bei verschiedenen Modulen keine Namensgleichheiten von Klassen und Funktionen/Methoden geben kannDer Core ist dadurch in der Lage, die Position der Klassendateien anhand der Klassennamen eindeutig zu bestimmen, um sie durch den auf WB optimierten Autoloader nachzuladenEine explizite Einbindung der Klassendateien per include() oder require() wird dadurch überflüssig +
-</blockquote>WebsiteBaker ab v2.9.0 erfordert PHP 5.4.x als Mindestvoraussetzung. Für eine Übergangszeit sind 2 verschiedene Namenskonventionen für Klassen zulässig. Das erklärte Ziel ist jedoch die durchgängige Umstellung auf Namespaces um deren Vorteile zu nutzen und auch den Benennungsaufwand deutlich reduzieren zu können. +
-==== Klassen ==== +
-Klassennamen müssen in **StudlyCaps** deklariert werden und müssen folgender RegEx-Regel entsprechen: '/[A-Z][a-zA-Z0-9]+/'. Nummern sind in Klassennamen gestattet, sollten jedoch auf das Notwendigste beschränkt werden und keine Verwechslungsgefahr mit Buchstaben bergen. Besteht der Klassenname aus mehr als einem Wort, so ist der jeweils erste Buchstabe eines Wortes groß zu schreiben. Mehrere aufeinanderfolgende Großbuchstaben sind nicht erlaubt. Beispiel anhand eines Namens: +
-^Bezeichner ^ Stautus | +
-|smtp_mailer | [color=red]falsch[/color] | +
-|Smtp_Mailer | [color=red]falsch[/color+
-|SMTPmailer | [color=red]falsch[/color] | +
-|SmtpMailer | [color=green]richtig[/color+
- +
-==== Abstrakte Klassen und Interfaces ==== +
-Generell folgen abstrakte Klassen und Interfaces der gleichen Konvention wie Klassen, mit einer zusätzlichen Regel: Die Namen von abstrakten Klassen und Interfaces müssen mit derm Term "**Abstract**" bzw. "**Interface**" enden, und dem Term darf kein Unterstrich vorangestellt sein. Als Beispiel wird //**Plugin_Abstract**// als ungültig angenommen, aber **PluginAbstract** oder **m_MyModul_PluginAbstract** wären gültige Namen. +
- +
-==== Emulierte Namespaces ==== +
-In diesem Modus ist in Klassennamen zusätzlich der Unterstrich '_' als Sonder-/Funktionszeichen gestattetEr dient jedoch ausschließlich als PfadseperatorKlassennamen bestehen hier nicht allein aus dem bis jetzt definierten Namen, sondern müssen zusätzlich noch genau definierte Präfixes enthaltenNur dann ist es möglich, aus dem Klassennamen den exakten Dateinamen zu ermitteln, so dass die passende Datei bei einem Zugriff auf eine Klasse automatisch geladen(included) werden kann. +
- +
-Die Klassenbibliotheken von WebsiteBaker sind in mehrere Gruppen aufgeteilt:\\ +
-**Klassen des Kerns**:  sind im Verzeichnis **''/framework/''** oder einem seiner Unterverzeichnisse zu findenHierfür ist kein Prefix erforderlich.\\ +
-**Klassen der Module**: Klassen der Module im jeweiligen Modulverzeichnis **''/modules/%modul_name%/''** oder einem seiner Unterverzeichnisse. Der Bezeichner muss zwingend den Prefix  '**m_**' erhalten. **Beispiel:** m_MyModule_PluginInterface \\ +
-**Klassen des ACP**: (AdminControlPanel => ehem. Backend) sind im Verzeichnis **''/admin/''** oder einem seiner Unterverzeichnisse zu finden. Der KlassenBezeichner muss zwingend den Prefix '**a_**' erhalten. **Beispiel:** a_Pages_PageTree\\ +
-**Klassen der third-party libraries**: die im Verzeichniss **''/include/''** sowie seinen Unterverzeichnissen liegen, werden vom Autoloader nicht automatisch erfasst. Jede Library hat jedoch die Möglichkeit, eine eigene Registrierung im SPL-Autoloaderstack vorzunehmen. Mehr dazu in der Beschreibung des Autoloaders. +
- +
-==== Dateinamen ==== +
-Soweit die vorgenannten Regeln für Klassennamen eingehalten wurden, ergeben sich die Dateinamen eindeutig aus den Klassennamen. Die Klasse **m_MyModul_PluginAbstract** findet sich demnach in der Datei **''/modules/MyModul/PluginAbstract.php''**.\\ +
-Für alle anderen Dateien sind nur alphanummerische Zeichen und der Bindestrich (**-**) gestattet. Leerzeichen sind völlig verboten.\\ +
-Jede Datei die irgendeinen PHP Code enthält sollte mit der Endung **.php** enden. +
- +
-==== Funktionen und Methoden ==== +
- +
-Funktionsnamen dürfen nur Alphanummerische Zeichen enthalten. Unterstriche sind nicht gestattet. Nummern sind in Funktionsnamen gestattet aber in den meisten Fällen nicht empfohlen. +
-Funktionsnamen sollten den Pascal-Case-Konventionen folgen und immer mit einem Großbuchstaben anfangen. Wenn Funktionsnamen aus mehr als einem Wort bestehen, muß der erste Buchstabe jeden Wortes großgeschrieben werden. Wortreichtum wird generell befürwortet. Funktionsnamen sollten so wortreich wie möglich sein um deren Zweck und Verhalten möglichst genau zu erklären. +
- +
-Für Objekt-orientiertes Programmieren, sollten Zugriffspunkte zu Methoden oder Eigenschaften möglichst immer mit einem klein geschriebenen Verb wie //get//, //set//, //add//, //delete//, //load//, //save//, //execute// etc. beginnen, das dann von einem Substantiv in PascalCase gefolgt wird, welches das zu bearbeitende Objekt beschreibt. Beispiel: <php> $oMyObject->saveItemList(); </php> oder <php> $oMyObject->executeReloadModules(); </php> +
- +
- +
-Wenn Design-Pattern implementiert werden, wie Singleton oder das Factory Pattern, sollte der Name der Methode den Namen des Pattern enthalten wo es praktikabel ist, um das Verhalten besser zu beschreiben. +
- +
- +
-===== Code Stil ===== +
- +
- +
- +
-===== Inline Dokumentation ===== +
  
dev/all/start.txt · Zuletzt geändert: 03.06.2015 15:48 von 127.0.0.1