variabelen (type) benamingen
Regelmatig zie ik dat sommigen van jullie een variabele vooraf laten gaan door een type aanduiding, bijvoorbeeld i voor integer en a voor array.
$iNumber = 99;
$aNames = array('Klaas', 'Jan', 'Piet');
Zelf heb ik dit nooit gedaan, maar ik vraag me af of ik dit wel of niet zou moeten doen. Zelf zou ik gewoon zeggen:
$number = 99;
$names = array('Klaas', 'Jan', 'Piet');
Ik vind dit duidelijker lezen dan het 1e voorbeeld, maar als je verderop in je code de variabelen wilt gebruiken, dan kun je niet (aan de naam) zien om wat voor type variabele het gaat.
Ik ben benieuwd wie van jullie gebruik maken / maakten van type aanduidingen en wat jullie ervaringen zijn. Is het zinvol om type aanduidingen te gebruiken, of verstoort het juist de leesbaarheid van de code? Kortom... graag jullie ervaringen!
Ik gebruik het zelf niet, maar ik kan mij voorstellen dat het in bepaalde gevallen wel handig is.
Ik gebruik het niet simpelweg omdat ik het storend vind. Daarnaast, er is geen coding standard waar iedereen zich aan moet houden. Ook hierin geldt dus dat het een persoonlijke keuze is.
Dat is met veel dingen zo, bijv: Zet jij overal commentaar bij? Of alleen de functies, of alleen de classes of laat je aan de hand van de naam van een functie / class zien wat de functie / class doet?
Niels
En bij bijv. $result = mysql_query('SELECT foo FROM bar'), noem je dit nu $rResult? Oké, het is een resource dus we gebruiken een r als prefix. Vervolgens besluit ik mysql te vervangen met PDO. Dan wordt er een object gereturned, geen resource. Moet ik dan alle variabele in het script aanpassen met $oResult?
Een array kan in PHP ook als object gebruikt worden. Moet ik dan $aNames of $oNames gebruiken?
Is een object wel een object, of wil ik dit als class type zien en moet ik er $cNames van maken?
Allemaal verwarrende omstandigheden.
De benaming hou ik gewoon zo duidelijk mogelijk. Als ik een array heb gebruik ik meervoud, bijv. $names. En bij alle andere omstandigheden enkelvoud, bijv. $name.
Thanks voor de reacties! Ik dacht dat het wellicht een coding standard was maar dat is dus niet zo. De tip om bij een array meervoud te gebruiken is een goede. Volgens mij doe ik dat vaak onbewust ook wel, maar daar ga ik voortaan zeker op letten. Thanks allemaal!
Volgens mij is het veel beter om de scope van je variabelen zo klein mogelijk te houden. Dus korte(re) functies die een duidelijk doel dienen en niet je hele script achter elkaar plakken. Als de functies korter zijn en daarmee de variabelen dus een heel duidelijke scope hebben is het al duidelijk genoeg wat mij betreft. Zet er nog een juiste beschrijving bij en je hoeft je over dit soort dingen niet meer druk te maken.
Kun je een klein voorbeeldje geven van wat je bedoelt Erwin. Hoe het volgens jou niet moet en hoe het volgens jou wel moet?
Dit hele geheel kan je natuurlijk allemaal achter elkaar zetten en zo een script bouwen van 1000 regels. Klinkt overdreven, maar het is de manier die de meeste mensen die hier om hulp vragen gebruiken.
Of, je kan voor elk onderdeel een stel functies (of objecten) schrijven die elk een deel van de functionaliteit voor hun rekening nemen. Zo krijg je dus vier hoofd functies (of objecten):
- inlezen, controleren en bewerken van de gegevens
- connectie met je database wegschrijven/ophalen van gegevens
- bewerken van je gegevens
- HTML pagina bouwen en naar de browser sturen
Op die manier hoeft je "pagina.php" niet heel erg lang te zijn en is het dus overzichtelijk wat je variabelen allemaal zijn. De functies/objecten die het echte werk doen kan je op eenzelfde manier opdelen. Hierdoor is het niet alleen veel makkelijker/duidelijker hoe alles werkt, het is ook nog eens veel makkelijker om code te hergebruiken.
Ik vind het belangrijker om vars een duidelijke naam te geven, want om het voorbeeld van mysql_query aan te halen, dit geeft namelijk niet altijd een recource terug, maar bij update, insert ect queries een bool.
@Ger: wat bedoel je met Hongaarse methode? Ik dwaalde even af naat compleet andere gedachten, maar die hebben er waarschijnlijk op geen enkele manier iets mee te maken :)
Als je het handig splitst worden je variabelen altijd maar in een klein deel van je code gebruikt en door de context waar ze in staan is het duidelijk wel type ze hebben.
laatste vraag... maak je / jullie variabele namen altijd zo kort mogelijk?
bijv. je hebt een Class die heet User. Noem je je functie dan getUserName() of getName()? En in de functie zelf gebruik je dan $name of $user_name? Ik snap dat er geen standaard is, maar ben gewoon benieuwd wat jullie doen. Of bijv. gebruik je $db of $database? Ik schrijf zelf liefst alles voluit dus $database en $user_name.
De Hongaarse notatie is het prefixen van variabel/functie namen adhv hun types.
edit:
Voor class namen gebruik ik altijd camelcase. Classes beginnen altijd met hoofdletter, ik gebruik ook geen underscores ( _ ) in naamgeving tenzij het een aanduiding is van een private method. En methode namen worden voluit geschreven.
class User krijgt dus een veld genaamd $username, als ik een getter heb, word het GetUsername(){ return $this->username; }
Dus velden camelcase, de rest is allemaal leading capital camelcase. Alleen private methods krijgen een prefix met underscore dus _Reorganise(){}
Notatie lijkt veel op de gangbare notatie voor Java, persoonlijk mijn favoriete notatie. Enige verschil is dat ik private velden niet met een underscore begin, ik hou veel velden namelijk private en om steeds maar die underscore er tussen te moeten plakken vind ik ook zo onzinnig.
Gewijzigd op 26/01/2012 20:03:19 door Pieter Jansen
Waarom gebruik je geen underscores in variabele namen, dus $user_name? (of is het woord normaal aan elkaar?). Maar jij zou dus bijv. doen $amountstockproducts ipv $amount_stock_products?
Ah zo... oke... ik gebruik wel underscores... maar vind hoe jij het doet ook wel mooi. Wat doet de rest?
Ook ik gebruik camelCase i.p.v. under_scores. Ik vind zo'n underscore niet mooi staan en camelCase typt iets sneller :) Ik zou dus $amountStockProducts schrijven.
Bij een Class genaamt User gebruikt ik geen $username maar $name. Waarom? Omdat het anders erg dubbelop is. Je hebt een gebruiker en die gebruiker heeft een naam. Als hij ook nog een nickname heeft (dus echte en bijnaam) dan zou ik wel gebruik maken van $name en $nickname.
Ik heb in OO alle properties zonder underscore, behalve als het geen echte eigenschap is. Als je een Gastenboek hebt heeft die als eigenschap $reacties (meervoud => array). Maar $_db is geen eigenschap van Gastenboek maar heb ik wel nodig in de code. Vandaar de _.
Verder gebruikt ik de Zend standaards. Dus classnamen beginnen met een hoofdletter, properties en methods met een kleine letter. Bij classnamen gebruik ik trouwens wel een underscore, vind ik wat makkelijker staan.
Dus dan krijgt je iets als:
Oke thanks... haha, ben blijkbaar de enige die underscores gebruikt :D
http://www.joelonsoftware.com/articles/Wrong.html
Lees dat hoe dan ook eens.
Ik gebruik geen underscore prefix in talen met visability (private, protexted etc.)
$amount_stock_products zou ik waarschijnlijk eerder $stock_size noemen.
In PHP gebruik ik liever geen CamelCase maar in JAVA weer wel aangezien JAVA consequenter is met benamingen dan PHP en daar CamelCase gebruikt wordt.
Underscores werden vroeger idd veel gebruikt, CamelCase is van nu en komt voort uit de java (niet javascript) wereld. Ook de type aanduiding/letter voorafgaand aan de variabelenaam is van vroegah.