Benutzer-Werkzeuge

Webseiten-Werkzeuge


developer:kodierrichtlinien

Dies ist eine alte Version des Dokuments!


Coding Guidelines

Ground Rules

  • Geschwungene Klammern gehören immer in eine eigene Zeile.
  • Zur Einrückung sind Tabs zu verwenden. Diese werden NICHT durch Leerzeichen ersetzt. (per Default entspricht ein Tab 4 Leerzeichen)
  • Zeilenlänge sollte 120 Zeichen nicht überschreiben
  • Jede Funktion sollte einen DocBlock Kommentar besitzen
  • Kontrollstrukturen besitzen ein Leerzeichen vor der öffnenden Klammer
  • SQL Schlüsselwörter werden in Großbuchstaben geschrieben.
  • Längere SQL Befehle sind entsprechend einzurücken
  • Code ist mit Codesniffer auf Gültigkeit zu Prüfen
Zum Prüfen der Codingstyles wird Codesniffer verwendet. Nähere Informationen hierzu sind auf folgender Seite zu finden:

https://github.com/FH-Complete/FHC-Core/wiki/CodingStyles

Namensgebung

Eine einheitliche Form der Namensgebung für Variablen, Konstanten und anderer Komponenten erleichter es dem Entwickler, den Code des anderen zu verstehen.

Dateinamen

Alle Dateinamen haben die für ihren Dateityp bestimmte Endung. So haben z.B. HTML Dateien die Endung .html oder PHP Dateien .php. Es gibt jedoch Datentypen die eine eigene Schreibweise haben. Hier eine Aufzählung der wichtigsten:

  • Klassen: <klasse>.class.php
  • PHP-File: <name>.php
  • HTML-File: <name>.html
  • RDF-File: <name>.rdf
  • JavaScript: <name>.js
  • CSS: <name>.css
  • XUL: <name>.xul
  • Config: <name>.config.inc.php

Hierzu sind Endungen wie <name>.rdf.php oder <name>.js.php erlaubt.
Es sind nur alphanumerische Zeichen, Underscores und Trennstriche erlaubt.
Dateinamen dürfen keine Umlaute oder Sonderzeichen enthalten.

Beispiele für gültige Namen sind:

  • studiengang.class.php
  • bestellung.rdf.php
  • tablesort.css
  • kontakt.js.php
  • ToDo_CIS.html

Variablen

Alle Variablen müssen mit Kleinbuchstaben beginnen und der „camelCaps“ Namenskonventation folgen. Das bedeutet, wenn ein Variablenname aus mehereren Namen besteht muss der Anfangsbuchstabe von jedem neuen Wort großgeschrieben werden. Repräsentiert die Variable eine ID so wird die Endung ID mit _ angefügt. Variablennamen sind so kurz und so verständlich wie möglich zu halten. Variablen wie $i und $j dürfen nur bei Loops verwendet werden.

Variablen in Klassen müssen immer so heissen wie sie in der Datenbank angelegt wurden.

$anzahlVariablen
$datum
$person_id
CamelCaps is recommended for Codeigniter Scripts. Underlines are only allowed in legacy scripts

Konstanten

Pfade werden in Konstanten immer mit / beendet

define('SERVER_ROOT','http://www.technikum-wien.at/');

Session Variablen

Session Variablen die nur ein bestimmtes Modul betreffen, werden folgendermaßen benannt:
[Modulname] / [Name der Variable]
Andere Session Variablen, die das ganze System betreffen werden ohne Modulnamen geschrieben.

$_SESSION['cms/menu']
$_SESSION['wawi/user']
$_SESSION['user']

Eine Session Variable wird immer klein geschrieben.

Funktionen und Methoden

Funktionsnamen müssen immer mit einem Kleinbuchstaben beginnen. Wenn eine Funktion aus mehreren Namen besteht, muss der Anfangsbuchstabe von jedem neuen Wort grossgeschrieben werden. Funktionen und Methoden müssen so klar wie möglich bezeichnet werden, damit anhand des Funktionsnamen jeder versteht, wofür diese bestimmt sind. Optionale Übergabeparameter müssen immer mit null initialisiert werden. Hier ein paar Beispiele für gültige Funktionsnamen:

getAllDetailsFromBestellung()
load()
saveTags($tag, $visible = null)

Kommentare

Kommentare die nur eine Zeile lang sind sollen mit / / beginnen. Für Kommentare, die länger als eine Zeile sind gilt als Start die /* Zeichenfolge und als Beendigung */.

Kommentare mit # sollen nicht verwendet werden.

Klassen

Jede Klasse muss im Minimum einen Docblock mit einer Beschreibung enthalten. Mit einem Docblock Kommentar bezeichnet man spezielle Kommentare, die sich automatisch generieren um PHP Abschnitte genauer zu kommentieren. Diese beginnen mit / * * und es können spezielle tags wie @param oder @return benutzt werden.

/**
* Short description for class
*
* Long description for class (if any)...
*/

Funktionen und Methoden

Jede Funktion oder Klassenmethode muss im Minimum einen Docblock mit folgenden Tags enthalten: Beschreibung, Parameter und Rückgabewerte.

/**
* Short description for the function
*
* Long description for the function (if any)...
*
* @param array $array Description of array.
* @param string $string Description of string.
* @return boolean
*/

Programmkopf

/*
 * Copyright (C) 2015 fhcomplete.org
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,USA.
 *
 * Authors: Vorname Nachname <email@technikum-wien.at>
 */

Zu beginn jedes Skriptes soll ganz oben der GNU Header eingefügt werden. Im Authors Block werden nur Programmierer erwähnt die das aktuelle File auch wirklich bearbeitet haben.

Programmierstil

Strings

Ein String wird mit echo ausgegeben und sollte grundsätzlich mit einfachen Apostrophen (single quotes) abgegrenzt werden. Dies hat den Vorteil, dass PHP Code im String nicht ausgeführt wird und so z.B. HTML Ausgaben einfacher und schneller sind.

$message = 'Hello World';
echo '<div style="float: right;">'.$message.'</div>';

IF - ELSE

Um Blöcke zu gruppieren, können zusätzliche Klammern eingesetzt werden. Bei längeren Bedingungen werden alle Bedingungen untereinander dargestellt , um die Lesbarkeit zu erhöhen. Die öffnende geschweifte Klammer wird immer in die nächste separate Zeile geschrieben . Die abschließende geschweifte Klammer erhält eben- falls immer eine separate Zeile. Jeder Code innerhalb der geschweiften Klammern muss einen Tabulator (standardmäßig vier Leerzeichen) eingerückt werden.

if ($user == 'Herbert')
{
    echo 'Hallo Herbert';
}
else
{
    echo 'Falscher User';
}

Bei sehr kurzen if-else Konstrukten kann auch der dreifach konditionale Operator verwendet werden:

$sampleVar = isset($_GET['sampleVar']) ? $_GET['sampleVar'] : '';

Gibt es nur eine ausführende Zeile, so können die geschweiften Klammern auch weggelassen werden.

if ($user == 'Herbert')
    echo 'Hallo Herbert';
else
    echo 'Falscher User';

Datenbankabfragen

  • Datenbankabfragen sind grundsätzlich über die Datenbankklasse abzusetzen.
  • Vor jedem Tabellennamen ist das entsprechende Schema anzugeben
  • Schlüsselwörter (zB SELECT, WHERE, FROM, GROUP BY) sind groß zu schreiben
  • Um SQL-Injections zu verhindern, sind die Paramter mittels der Funktion db_add_param zu escapen. (Mögliche Übergabeparameter sind FHC_INTEGER, FHC_STRING und FHC_BOOLEAN) (gilt nur für nicht-CI-Code)
$qry = "SELECT 
            * 
        FROM 
            public.tbl_person 
            JOIN public.tbl_benutzer USING(person_id)
        WHERE
            person_id=".$db->db_add_param($person_id, FHC_INTEGER, false);

Boolean Attribute sind über die Datenbankklasse zu parsen um Inkompatibilitäten mit verschiedenen DB-Systemen zu verhindern.

$aktiv = $db->db_parse_bool($row->aktiv);

HTML-Ausgaben

HTML Attribute sollen generell mit doppelten Hochkomma umschlossen werden. Variablen die innerhalb des HTML-Codes ausgegeben werden sind mit der Funktion convert_html_chars zu escapen. Dies ist vorallem wichtig bei Strings die den Typ Text oder varchar in der Datenbank haben.

echo '<div style="float: right;">'.$basis->convert_html_chars($message).'</div>';

Nach Doppelpunkt bei Style Anweisungen sollte ein Leerzeichen stehen.

Sonstiges

  • Geschwungene Klammern - Um einen Block zu definieren werden die geschwungenen Klammern immer in der neuen Zeile gesetzt.
  • Tabulator - Es wird immer wenn möglich mit Tabulatoren eingerückt. Tabulatorbreite = 4 Leerzeichen wobei der Tabulator als solches gespeichert wird und nicht durch Leerzeichen ersetzt wird.

Musterklasse

zweck.class.php
<?php
/* Copyright (C) 2015 fhcomplete.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,USA.
*
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
*
*/
require_once(dirname(__FILE__).'/basis_db.class.php');
 
/**
* Klasse Zweck liest und manipuliert Daten aus bis.tbl_zweck
*/
class Zweck
{
    public $new = true;    
    public $result = array();
 
    /**
     * Gibt alle Zweckbeschreibungen zurueck, bei Erfolg True
     *
     * @param integer $id Id die geladen warden soll, wenn keine id uebergeben wurde.
     * @return boolean
     */
    public function getAll($id = null)
    {
        return true;
    }
}
?>
/var/www/wiki/data/attic/developer/kodierrichtlinien.1499418668.txt.gz · Zuletzt geändert: 2019/08/13 13:49 (Externe Bearbeitung)