Hey guys,

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?

<?php
class User {

private $name;

public function getName() {
return $this->name;
}

public function setName($name) {
$this->name = $name;
}

}
?>
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:

<?php
class User {

private $name = '';

public function getName() {
return $this->name;
}

public function setName($name) {
$this->name = $name;
}

}
?>
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?
Aan het initialiseren van klassen kunnen we beter een nieuw topic besteden, want dat is soms bittere noodzaak en soms juist een hel ;-)

>> 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.
>> 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?
Als we het, zoals eerder deze week, hebben over tussenvoegels/voorvoegsels in achternamen, is er misschien toch wel een verschil tussen:

• null voor: er is geen tussenvoegsel ingesteld en

• '' voor: deze achternaam heeft geen tussenvoegsels.
Oké, maar als iemand geen tussenvoegsel ingeeft, zou je kunnen zeggen a) deze naam heeft geen tussenvoegsel of b) deze persoon heeft geen tussenvoegsel ingevuld. Dat weet je niet. Dus lijkt het me geen probleem om die op null te laten (even afgezien van wat je er in de database mee doet).

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"?
In andere programmeertalen wordt er altijd null teruggegeven als een variabel geen waarde heeft. Ik houd dit bij PHP ook altijd aan.

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?
Dit hangt af van de soort data. Wanneer een veld/kolom verplicht is, geef ik deze een default waarde. De prijs van een product bijvoorbeeld geef ik het type DECIMAL(6,2) en een default value van 0,00.

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.

Reageren