Štábní kultura v PHP... aneb zdrojový kód vizitkou každého programátora.

Z historických důvodů zde uvádím článek s tématikou štábní kultury v PHP, kterou původně vydal server Interval.cz (bohužel dnes je již článek nedostupný). Ze zkušeností je nastavení individuální v rámci vývojového týmu či skupiny lidí. Vždy jde však o maximální čitelnost kódu. Nový člen se snáze vyzná ve větších projektech, pokud budou všechny části systému psány ve stejném duchu.

Vývojáři Zend Frameworku vytvořili nový standart pro psaní PHP scriptů. Jsou to doporučení, která bychom měli respektovat. V mnoha ohledech jsou revoluční a pokud můžete, snažte se tato pravidla dodržovat.

Malou nevýhodou je, že pravidla kódování pro Zend Framwork nejsou kompatibilní s PEAR Coding Standards, která byla až do dnešní doby považována za určitý standard, lze však předpokládat, že se časem rozšíří více než PCS. Kompletní popis všech pravidel si můžete přečíst v dokumentaci, zde uvádím pouze ta pravidla, která považuji za nejdůležitější.

  • Soubory obsahující pouze PHP kód by nikdy neměly končit koncovkou ?>. Pravidlo vám pomůže vyhnout se chybám typu Cannot modify header information - headers already sent by. Může se stát, že programátor nebo editor nechá za koncovou značkou mezeru a při načtení souboru do jiného skriptu a následném volání funkce header() celá akce skončí výše zmíněnou chybou.

  • Pro odsazování používejte 4 mezery (a nepoužívejte tabulátor).

  • Snažte se psát skripty, které nebudou širší než 80 znaků (maximální povolená hranice je 120 znaků).

  • Dodržujte zvláštní pojmenování tříd, kdy název třídy mapuje cestu k souboru. Třída vždy začíná velkým písmenem a obsahuje znaky abecedy a podtržítko. Pokud třídu pojmenujete Php_Paging, pak by měla být umístěna v adresáři Php/Paging.php. Podtržítko tedy znamená nový adresář. Číslice jsou povoleny, ale nedoporučují se. První písmeno slova je vždy velké, ostatní jsou malá. Například Php_XML je chybný název, Php_Xml je správně.

  • Rozhraní vždy končí slovem Interface, například Php_Validator_Interface.

  • Metody i atributy dodržují takzvanou velbloudí notaci (camel caps), kdy první písmeno je malé a další slova jsou oddělena velkým písmenem, například getAllResult().

  • Používejte standardní předpony pro metody se stejným učelem. Předponu get mají metody, které vracejí nějakou hodnotu, set metody, které nějakou hodnotu nastavují, is je předpona pro metody, které vrací boolean hodnotu, add obsahují na začátku názvu metody přidávající hodnotu a podobně...

  • Pokud třída používá návrhový vzor, je uveden v názvu metody. Například metoda getInstance() používá singleton, z názvu factory() je jasné, že metoda implementuje návrhový vzor factory a podobně.

  • Snažte se používat dostatečně dlouhé názvy atributů a metod. Pouhé result, get, resource a podobné názvy nikomu nic neřeknou.

  • U privátních a chráněných atributů a metod používejte na začátku názvu podtržítko (například _setup).

  • Pomocné proměnné mohou být pojmenovány podle vzoru $n, ne však v cyklech, které jsou delší než 20 řádků.

  • Konstanty mají v názvu všechna písmena velká a slova jsou oddělena podtržítkem (například INTERVAL_CONSTANTA).

  • Používejte vždy plný zápis PHP značek, tedy <?php, nikoli <? (ve výchozím nastavení je kratší forma vypnutá).

  • Pro uzavření řetězce používejte jednoduché uvozovky (někdy bývají mylně považovány za apostrof, a to i v oficiální dokumentaci). Takzvané palcové, nebo též dvojité uvozovky používejte jen tehdy, pokud jsou uvnitř nich uzavřeny řetězce uvozené jednoduchými uvozovkami.

  • Řetězce můžete spojovat pomocí tečky (.), musí však být od tečky odděleny jednou mezerou ('magazin' . 'interval').

  • Spojování řetězců můžete rozdělit na více řádků (tečka vždy musí být pod rovnítkem).

$sql = "SELECT `id`, `name` FROM `people` "
     . "WHERE `name` = 'Susan' " 
     . "ORDER BY `name` ASC ";
  • Pole nezačínejte zápornými indexy.
  • Při deklaraci pole a volání funkce vždy oddělte hodnoty mezerou:
$interval = array(1, 2, 3);
  • Při deklaraci asociativního pole pište každou hodnotu na nový řádek.
$pole = array(
    'a' => 'Ačko',
    'b' => 'Béčko'
);
  • Složená závorka obsahující tělo třídy či metody je vždy na novém řádku.
class MyClass
{
}
  • V každém souboru může být pouze jedna třída.
  • Atributy třídy nebo instance jsou uvedeny na začátku třídy.
  • Hodnota příkazu return nesmí být uzavřena v závorkách.
  • Podmíněné konstrukce oddělte z obou stran mezerou, metody naopak mezeru neobsahují. Operátory oddělte mezerou.
if ($interval == 1) {
}
  • V podmíněné konstrukci switch použijte odsunutí.
switch ($people) {
    case 1:
        //nejaka akce
        break;
    case 2:
        break;
    default:
        break;
}
  • V konstrukci switch nikdy nezapomeňte na část default.
  • Snažte se psát co nejvíce komentářů!
  • Pro komentáře používejte syntaxi phpDoc.
  • Každý soubor by měl začínat zápisem phpDoc.
/**
 * Krátký popis souboru
 *
 * Pokud je potřeba, tady uvedete větší popis souboru
 *
 * LICENSE: informace o licenci
 *
 * @copyright 2005 Zend Technologies
 * @license   http://www.zend.com/license/3_0.txt PHP License 3.0
 * @version   CVS: $Id:$
 * @link      http://dev.zend.com/package/Package Name
 * @since     File available since Release 1.2.0
 */
  • Každá třída by měla obsahovat na začátku komentář.
/**
 * Krátký popis třídy
 *
 * Pokud je potřeba, tady uvedete větší popis třídy
 *
 * @copyright  2005 Zend Technologies
 * @license    http://www.zend.com/license/3_0.txt PHP License 3.0
 * @version    Release: @package_version@
 * @link       http://dev.zend.com/package/PackageName
 * @since      Class available since Release 1.2.0
 * @deprecated Class deprecated in Release 2.0.0
 */
  • Rovněž každá metoda musí obsahovat svůj popis (nezapomeňte na značku @throws pro vyhozené výjimky).

Přejato ze serveru Interval.cz