default properties?
Ik heb een class User met een getName functie en een setName functie. Wat moet volgens jullie de getName functie teruggeven op het moment dat setName nog niet is gebruikt om een naam op te geven?
Code (php)
De twee meest voor de hand liggende opties lijken mij dat de getName functie null returnt (zoals hierboven), of dat de getName functie een lege string returnt:
Code (php)
Heeft een van beide opties de voorkeur (en zo ja waarom) of maakt het helemaal niks uit en is het een kwestie van persoonlijke smaak?
Null vanwege de speciale betekenis: geen waarde.
Oké. Zo doe ik het zelf ook. Ik had verwacht dat er misschien ook mensen zijn die juist alles initialiseren. Geef jij dan in je commentaar bij de getName functie aan dat deze óf een string teruggeeft, óf null?
>> Geef jij dan in je commentaar bij de getName functie aan dat deze óf een string teruggeeft, óf null?
Strikt genomen moet je volgens PSR-4 dan inderdaad @return string|null en dergelijke gebruiken. Je wilt immers weten of er uitsluitend een string uitkomt (@return string) of eventueel ook een null (@return string|null). Bovendien kan je methode een null nog met '' retourneren als string.
Oké.. maar dit willen we dus niet toch? Als ie niet is geset, dan wordt het dus gewoon null. Right?
• null voor: er is geen tussenvoegsel ingesteld en
• '' voor: deze achternaam heeft geen tussenvoegsels.
Maar de "regel" is dus dat wanneer een property geen default value heeft en de property niet geset is, er null wordt gereturned, als in "deze property is niet geset/onbekend"?
PHP wijkt hierin af van andere programmeertalen. In bijvoorbeeld C# of Java is het onmogelijk om een lege string terug te krijgen als een variabel geen waarde heeft. In zo'n programmeertaal krijg je een null pointer exception i.p.v. een lege string als je met een lege of niet bestaande variabel werkt.
Oké, thanks. Dus gewoon null aanhouden. En in het verlengde daarvan (ik had hier onlangs op het forum een vraag over) hoe sla jij lege waardes op in de database? Ook als null?
Maar velden die niet verplicht zijn geef ik inderdaad altijd de waarde null. Ik vind dat zelf netter. Daar is de null waarde in MySQL immers voor bedoelt. Daarnaast gaan string functies in MySQL zoals CONCAT() volgens mij anders met null waardes om dan strings (VARCHAR of TEXT), maar dat weet ik niet zeker.
Overigens vind ik IS NULL netter staan in je query dan = "", maar dat is persoonlijk.
Allright, thanks. Ik ben zelf ook gewend om met NULL te werken, maar er zijn ook mensen die overal per se een niet-null waarde in de database willen hebben staan.
Dat is een goed voorbeeld van een lastige keuze: met 0.00 als standaardwaarde verlies je het onderscheid tussen producten waarvan de prijs nog niet bekend is en gratis producten. Om te voorkomen dat er per ongeluk producten cadeau worden gedaan, zou ik hier toch kiezen voor een nullable kolom en een DEFAULT NULL.
Daar heb je een punt Ward. Kan me herinneren dat zoiets een paar jaar geleden eens is gebeurd. Het exacte hoe en wat herinner ik me niet meer. Maar het ging erom dat mensen iets voor 0 euro konden kopen, en dat gebeurde dan ook massaal. Daar sta je dan als ondernemer :-s Hahaha...
Maurice vB op 16/04/2014 11:49:13:
Overigens vind ik IS NULL netter staan in je query dan = "", maar dat is persoonlijk.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Execute:
> SELECT '' IS NULL AS waarofniet
+ --------------- +
| waarofniet |
+ --------------- +
| 0 |
+ --------------- +
1 rows
> SELECT '' IS NULL AS waarofniet
+ --------------- +
| waarofniet |
+ --------------- +
| 0 |
+ --------------- +
1 rows
Dan is er één of andere druiloor een formulier aan het verwerken:
Ward van der Put op 16/04/2014 13:53:26:
>> De prijs van een product bijvoorbeeld geef ik het type DECIMAL(6,2) en een default value van 0,00.
Dat is een goed voorbeeld van een lastige keuze: met 0.00 als standaardwaarde verlies je het onderscheid tussen producten waarvan de prijs nog niet bekend is en gratis producten. Om te voorkomen dat er per ongeluk producten cadeau worden gedaan, zou ik hier toch kiezen voor een nullable kolom en een DEFAULT NULL.
Dat is een goed voorbeeld van een lastige keuze: met 0.00 als standaardwaarde verlies je het onderscheid tussen producten waarvan de prijs nog niet bekend is en gratis producten. Om te voorkomen dat er per ongeluk producten cadeau worden gedaan, zou ik hier toch kiezen voor een nullable kolom en een DEFAULT NULL.
Klopt, ik wilde even snel een voorbeeld geven, maar je hebt inderdaad een punt. Ook in dit geval kun je beter NULL gebruiken. Bedankt voor de aanvulling!
@Ger van Steenderen: Als je de set method zo maakt dat hij rekening houdt met lege waardes, kan dat toch prima? Als het framework er maar op gemaakt is.
Gewijzigd op 16/04/2014 15:34:50 door P-ter AA