Code Conventie
Inhoud PHP algemeen... 3 Namen van variabelen... 3 Enkele of dubbele aanhalingstekens... 3 Globale variabelen... 3 Namen van functies... 3 Argumenten van functies... 3 Formattering... 4 Accolades... 4 Als dan anders / switch... 4 Boolean... 5 De identieke operator... 5 Commentaren... 5 PHP tags... 5 Algemeen... 5 Classes... 7 Naam van een class... 7 Naam van een methode en een functie... 7 Attributen van een class... 7 Argumenten van een methode... 7 Queries... 8 Javascript... 9 Functies... 9 Framework... 9 HTML... 10 Doctype... 10 Digital Mind special... 12 Websitestructuur... 12 Extra afspraken... 12 Algemeen gebruikte scripts... 13 Pagina 2 van 13
PHP algemeen Namen van variabelen De eerste letter is een kleine letter Alle woorden na de eerste letter moeten beginnen met een hoofdletter Regels: Labels lbl lblname Arrays arr arrusers Pdf pdf pdfinvoice Images img imgfolder Combo & list lst lstcountry SSQL qry qryaddress SRunSQL rqry rqryaddress Error err errnouser Text txt txtinfo Help hlp hlpactivefield Object obj objclass (behalve bovengenoemde) Enkele of dubbele aanhalingstekens Gebruik altijd dubbele aanhalingstekens Voorbeelden: echo Firstname \n ; echo Dit is een variabele.$variabele; echo <table cellspacing=\ 0\ cellpadding=\ 0\ border=\ 0\ > ; Globale variabelen Alles in hoofdletters met een liggend streepje (_) als scheiding Voorbeelden: Define( CONSTANT, Hello World ); Define( CONSTANT_VARIABLE, Hello World ); Namen van functies De naam moet duidelijk maken wat het doet (ErrorOutput(), SetOnClick()) Als er een woord is waar men alles in hoofdletters kan schrijven, niet doen. FOUT : GetHTMLStatistics JUIST : GetHtmlStatistics Argumenten van functies De eerste letter is een kleine letter Alle woorden na de eerste letter moeten beginnen met een hoofdletter zoals de naam van een class Neem de regels voor de voorvoegsels in acht (txt, lbl, ) GetUserSettings($txtFirstName, $arrlastname); Pagina 3 van 13
Formattering Accolades Eerste accolade begint op een nieuwe lijn, laatste eindigt op een nieuwe lijn Spring in waar nodig om de leesbaarheid te bevorderen Inspringen = 4 spaties (afhankelijk van het programma voor Zend = 1 tab) if ($condition) while ($condition) for ($i = 0;$i < 10;$i++) foreach ($var as $k => $v) Als de if of de else accolades nodig heeft, dan moet het bij de andere ook gebruikt worden. if ($condition) $a = $b; else $a = $c; Als dan anders / switch if ($condition) elseif ($condition) else ($condition)?funct1:funct2; Als de if structuur complex wordt, schakel dan liever over naar een switch statement switch($var) case 1: break; Pagina 4 van 13
Boolean case 2: break; default: break; Controle op true of false van een functie Voorbeelden: if (record_exists()) if (!record_exists()) De identieke operator Als we deze operator gebruiken zal er enkel worden aangegeven dat 2 variabelen hetzelfde zijn als ze dezelfde waarde hebben en van hetzelfde type zijn. if(strpos($myvar, X ) === false) //X is niet in $myvar Commentaren Probeer // te gebruiken ipv /* */ Voor vaste commentaren is het handig om //-- te gebruiken, dan valt het direct op In Zend: // : ctrl + / /* */: ctrl + shift + / PHP tags Gebruik <?php?>, niet <??> PHP tag niet afsluiten Algemeen Spatie tussen de if/while/foreach/ en de voorwaarde Een spatie voor en na alle operatoren (=, <, >, =>, ) Een spatie na elke, en ; Na een header redirect altijd die() zetten Niet testen met nummers, eerder met variabelen $categoryno = 14; if($categoryno > $testno) Pagina 5 van 13
ipv if(14 > $testno) Als een tabel wordt opgeslaan in een variabele, moet er ook een uitlijning gebeuren: $var = <table>\n <tr>\n <td></td>\n </tr>\n </table>\n ; Voor Zend-gebruikers Bij het gebruik van de toetsencombinatie ctrl + shift + F wordt de PHP code automatisch uitgelijnd vanaf de tag waar PHP wordt geopend (<?php). Deze toetsencombinatie lijnt geen HTML code uit! LET OP!!! Deze toetsencombinatie kan een hulp zijn voor de tabs, maar is geen hulp voor de code conventie. Ze gaat bijvoorbeeld geen accolade op een nieuwe regel zetten. Pagina 6 van 13
Classes Naam van een class Hoofdletters als eerste letter van een nieuw woord, de rest kleine letters Eerste letter van het woord is een hoofdletter Geen liggend streepje (_) tussen de woorden Naam van een class begint met een S Voorbeelden: clsheader clsdatabase clsquerygenerator Naam van een methode en een functie Hoofdletters als eerste letter van een nieuw woord, de rest kleine letters Eerste letter van het woord is een hoofdletter Geen liggend streepje (_) tussen de woorden De naam moet duidelijk maken wat het doet (ErrorOutput(), SetOnClick()) Als er een woord is waar men alles in hoofdletters kan schrijven, niet doen. Voorbeelden: GetTotal() BuildWhereClause FOUT : GetHTMLStatistics JUIST : GetHtmlStatistics Attributen van een class Hoofdletters als eerste letter van een nieuw woord, de rest kleine letters Eerste letter van het woord is een hoofdletter Geen liggend streepje (_) tussen de woorden $TotalAmount Argumenten van een methode Hoofdletters als eerste letter van een nieuw woord, de rest kleine letters Eerste letter van het woord is een kleine letter Neem de regels voor de voorvoegsels in acht (txt, lbl, ) $inttotalamount Pagina 7 van 13
Queries Alle gereserveerde woorden met hoofdletters SUM() CONCAT() SELECT Als we een alias aan een tabel geven of aan een kolomnaam, dan moet er het woord AS tussenstaan in hoofdletter. SELECT * FROM address AS a SELECT lastname AS name FROM address Als er met meerdere tabellen wordt gewerkt met joins, dan moet er voor elke kolomnaam een alias staan. SELECT a.lastname, ac.countryname FROM address AS a INNER JOIN address_country AS ac ON a.countrycode = ac.countrycode De queries worden niet op 1 lange regel geschreven, maar uitgelijnd (vanaf 1 join) SELECT t.itemno, t.projectno, p.projecttitle FROM timemanagement AS t LEFT JOIN project AS p ON t.projectno = p.projectno WHERE t.itemdate <> 0 ORDER BY t.itemdate Update queries worden op 1 regel geschreven. Insert queries worden op meerdere regels geschreven. Als er gebruik gemaakt wordt van een select, dan gelden de regels voor een select statement (zie boven). INSERT INTO address (addresscode, lastname) VALUES ( $addresscode, $lastname ); UPDATE address SET addresscode = $addresscode WHERE addressno = $addressno; INSERT INTO address (addresscode, lastname) SELECT addresscode, lastname FROM address_tmp WHERE addressno > 1000; INSERT INTO address (addresscode, lastname) SELECT a.addresscode, a.lastname FROM address_tmp AS a INNER JOIN address_tmp AS a2 ON a.parentaddressno = a2.addressno WHERE a2.addressno = 5 Pagina 8 van 13
Javascript Functies Hoofdletters als eerste letter van een nieuw woord, de rest kleine letters Eerste letter van het woord is een kleine letter Geen liggend streepje (_) tussen de woorden Voorbeelden: gotourl Framework Als framework zullen we gebruik maken van Prototype al dan niet in combinatie met Scriptaculous (naar behoefte). Pagina 9 van 13
HTML Doctype Tot nu toe werd er vooral gewerkt met DOCTYPE <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> Dit zouden we willen veranderen en vanaf nu <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> gebruiken. Belangrijke aanpassingen in de code: Alle tags moeten worden afgesloten. Voor /> best een spatie zetten. FOUT: <p>dit is een test. JUIST: <p>dit is een test</p> FOUT: <img src= test.jpg alt= title= > JUIST: <img src= test.jpg alt= title= /> FOUT: <hr>, <br>, JUIST: <hr />, <br />, Alle tags en attributen worden geschreven in kleine letters FOUT: <P STYLE= >Dit is een test</p> JUIST: <p style= >Dit is een test</p> De elementen moeten op de juiste manier worden genest. Bij HTML was het nog mogelijk op de foutieve manier te nesten. FOUT: <b><i>dit is een test</b></i> JUIST: <b><i>dit is een test</i></b> Geen Block elementen in een inline element FOUT: <span><div></div></span> JUIST: <div><span></span></div> XHTML documenten moeten binnen een <html></html>root element staan. DOCTYPE altijd in hoofdletters geschreven! Er moeten dubbele aanhalingstekens staan rond de waarden van een attribuut. FOUT: <table width=100%> JUIST: <table width= 100% > Attributen moeten voluit geschreven worden. FOUT: <input checked> JUIST: <input checked= checked /> Pagina 10 van 13
Het attribuut name wordt vervangen door id (niet voor elementen binnen een form omdat de waarden worden doorgegeven met POST). FOUT: <form name= frmtest > JUIST: <form id= frmtest > Gebruik & in plaats van & tussen de argumenten FOUT: <a href= item.php?itemno=5&lang=nl > JUIST: <a href= item.php?itemno=5&lang=nl > Voor een overzicht van alle elementen en attributen: 1. http://www.blackwidows.co.uk/resources/tutorials/xhtml/index.php 2. http://www.w3schools.com/tags/default.asp Pagina 11 van 13
Digital Mind special Websitestructuur Verklaring: bron httpdocs o admin o images photolib filelib user company general o css o js o languages.php o index.php o pagehead.php o pagefoot.php o pageleft.php o pageright.php o item.php o news.php o php In de css -map komen alle stylesheets. Deze hebben als extensie.css, behalve als het echt nodig mocht zijn.php te gebruiken. In de js -map komen alle javascript bestanden en includes. Deze hebben als extensie.js, behalve als het echt nodig mocht zijn.php te gebruiken. In languages.php worden de labels en andere taalafhankelijke informatie bijgehouden voor de hele website. Zelfs als er slechts van 1 taal gebruik wordt gemaakt. Zo kan er naderhand snel een taal worden toegevoegd. Het is de bedoeling de pagina s naar de modules te benoemen. Een voorbeeld hiervan is dan item.php voor de dynamische pagina s, news.php voor de nieuwsberichten In de php map staan de algemene functies, classen en configbestanden. GEEN bestanden met logins en paswoorden in de httpdocs map. Extra afspraken Altijd de extensie.php gebruiken Voor classes en functiebibliotheken ook.php gebruiken, niet.inc of.class lib_ voor libraries ajax_ voor bestanden die via een ajax call opgeroepen worden Speciaal voor de front-end Functies plaatsen in lib_website.php (php map) Shopvariabelen gaan in lib_ecom.php in $arrshop[ ] (php map) Settingsvariabelen gaan in config.php in $arrwebsite[ ] (php map) Pagina 12 van 13
Algemeen gebruikte scripts Verzenden van mails : HTML Mime Mail Aanmaken van PDF bestanden : FPDF 1.6 Templating systeem : Smarty (extra document) Pagina 13 van 13