Naamgeving
Er zijn diverse manieren om je klassen en variabelen zinvolle namen te geven. Ook hier geldt weer, het maakt niet zoveel uit wát je volgt, als je de naamgeving maar consequent volhoudt.
Ik zal eerst de Hungarian Naming Convention (hierna: HNC) bespreken, die ook in het PHP 5 Superboek van Wouter Tengeler wordt beschreven. Daarna de manier waarop PEAR het graag wil zien.
Hungarian Naming Convention
Volgens de HNC is het handig om het type van de geretourneerde variabele op te nemen in de naam, wat je overigens alleen bij variabelen doet aangezien een functie meerdere typen kan retourneren.
De naam van een variabele bouw je als volgt op:
Allereerst kijk je naar het bereik wat de variabele heeft of zou moeten hebben. Is deze beschikbaar binnen een klasse of wordt hij doorgegeven als parameter? Wellicht is het een globale variabele?
Mogelijke waarden voor de scope (het bereik) van de variabelen zijn g, m, l en p:
g: global. Een variabele die overal kan worden gebruikt.
m: member. Een variabele die alléén binnen een klasse kan worden gebruikt. Deze declareer je in het algemeen voor het aanroepen van de constructor en zijn te herkennen aan $this->variabele.
l: local. Dit is een lokale variabele, die binnen een functie voor het eerst een waarde heeft gekregen.
p: parameter. Een parameter wordt aan een functie of methode (functie binnen een klasse) meegegeven en kan alleen in die functie gebruikt worden. Parameters zijn de variabelen die tussen de haakjes komen na een functieaanroep, bijvoorbeeld:
function functie($p_sParameter1, $p_iParameter2 = 100) {}
Ondanks het feit dat (of juist omdat) het voor PHP niet uitmaakt wat voor type een variabele krijgt (in de programmeertaal C++ bijvoorbeeld, geef je eerst aan dat een variabele een integer is met int), is het handig bij het debuggen om aan te geven wat voor type variabele een string zou moeten zijn. Nadat je de scope van de variabele hebt aangeduid, voeg je daarom een liggend streepje (underscore) toe, waarna je in kleine letters het type van de variabele beschrijft. Het is gebruikelijk hiervoor afkortingen te gebruiken.
Een i geeft bijvoorbeeld aan dat het om een integer gaat, een s geeft aan dat de variabele een string bevat. Onderstaande lijst is algemeen geaccepteerd, maar je kunt natuurlijk altijd zelf bepalen wat je gebruikt. Let er dan wel op dat je dat consequent en consistent doet!
numeriek n
-- float f
-- integer i
-- long l
string s
boolean b
array a
datum d
object o of obj
function fn
referentie r
variant v
constante c
Voor de meesten zal bovenstaande lijst voldoende zijn. Soms is het echter wenselijk dat je een object nader specificeerd (zoals je ook de numerieke waarde verder kunt specificeren in float, integer of long), Google dan even op "Hungarian Naming Convention" en je object, bv.: 'Document', 'Recordset' of 'Form'.
Nadat je het type variabele hebt aangeduid, geef je een beschijvende naam voor de varabele, beginnend met een hoofdletter bij ieder ‘woord’ van de naam. Bijvoorbeeld: Title, HeaderHeight of CountValue.
m_fCountValue // een variabele binnen een klasse die een float bevat
g_sTitle // een globale variabele die een string bevat
p_iHeaderHeight // een parameter die een integer waarde bevat
Wanneer je naar bovenstaande variabelen kijkt, krijg je al een aardig idee over wat de variabele bevat en hoe deze gebruikt wordt in een programma.
De PEAR methode
De PEAR standaard schrijft ons voor dat klassen altijd een beschrijvende naam moeten hebben, waarbij de naam van de klasse met een hoofdletter begint. Voorbeelden van klassenamen volgens de PEAR standaard:
Log
Net_Finger
HTML_Upload_Error
Een functie of methode zou de pakketnaam als prefix moeten krijgen, om te voorkomen dat functies uit verschillende pakketten conflicteren. De eerste letter van de naam (na de prefix) is een kleine letter. Iedere volgende letter van een nieuw “woord” krijgt een hoofdletter. Deze stijl wordt ook wel aangehaald als “bumpy case” of “camel caps”:
connect()
getData()
buildSomeWidget()
XML_RPC_serializeData()
Members van klassen die private zijn, worden voorafgegaan door een liggende streep:
_sort()
_initTree()
$this->_status
Protected members gaan daarentegen niet vooraf door een liggende streep.
protected $somevar
protected function initTree()
Constanten moeten altijd volledig in hoofdletters geschreven worden, met liggende strepen om woorden te scheiden. Constante namen die in klassen/pakketten worden gebruikt, worden in hoofdletters geschreven met de naam van de klasse/pakket als prefix. Bijvoorbeeld: de constanten die gebruikt worden door het DB:: pakket beginnen allemaal met DB_.
Opmerking: de constanten true, false en null zijn uitgezonderd van de regel dat constanten in hoofdletters worden geschreven; deze worden altijd in kleine letters geschreven.
Als je pakket globale variabelen gebruikt, dan moeten de namen ervan beginnen met een enkel liggend streepje gevolgd door de pakketnaam en wederom een liggend streepje. Het PEAR pakket bijvoorbeeld gebruikt een globale variabele die $_PEAR_destructor_object_list heet.
Inhoudsopgave
- Inspringen & Regellengte
- Naamgeving
- Overig
- Controlestructuren
- Een voorbeeld en verder lezen
- Functies
- Commentaar