Ik zoek een kort woord voor de naam van een constant, die de lading dekt. Ik leg het even uit.
We hebben bijv. een lijstje met constanten die een waarde vertegenwoordigen:
dutch = nl
english = uk
red = 1
blue = 2
Nu wil ik dus weten hoe je zo'n naam van een constante noemt, dus in dit geval "dutch" of "english". Ik wil namelijk een functie maken die die naam teruggeeft. Dus getXXX('nl') moet "dutch" teruggeven. Ik weet alleen geen goede functienaam. Ik dacht aan getName, maar het is eigenlijk niet echt een naam.
In code wil ik zeg maar zoiets kunnen doen:
<?php
echo 'I speak ' . getXXX('nl'); // I speak dutch.
echo 'The car is ' . getXXX(1); // The car is red.
?>
Wie weet een leuk naam voor deze functie? Of misschien zoiets als valueToText(), alleen "text" is ook weer zo algemeen.
<?php
echo 'I speak ' . valueToText('nl'); // I speak dutch.
echo 'The car is ' . valueToText(1); // The car is red.
?>
Het zou op zich kunnen, maar misschien is er hier iemand die nog iets beters weet?
>> Maar dat is ook geen constante, want morgen ga ik naar de kapper.
Hehe :)
Hoe stel jij dan voor dat ik het moet aanpakken? Laten we even het voorbeeld van gender nemen. Om het geslacht in te stellen zijn ISO waardes opgesteld. Als ik me niet vergis: 0->onbekend, 1->man, 2->vrouw, 9->niet van toepassing. Op dit moment weet ik die waardes nog, maar over een maand niet meer. Daarom wil ik dus constanten gebruiken. Als iemand een man is, dan wil ik in mijn code dit kunnen doen:
$user->setGender(gender::male);
Dat is natuurlijk hartstikke handig en duidelijker dan $user->setGender(1);
Maar die 1 wordt wel opgeslagen. Als ik vervolgens die 1 weer ophaal uit de database, dan wil ik daar weer "male" van kunnen maken. Dat is toch juist handig lijkt me?
Het probleem is dat 1 de ene keer bij 'wit' hoort omdat je een haarkleur verwacht, en een andere keer bij 'male' omdat je een gender verwacht. 1 heeft geen context. Verschillende functies/methoden creƫren context.
gender is zeker een interface na dat andere topic van je? Dan heb je alleen maar constanten tot je beschikking.
Als je er nou op deze manier een class van maakt:
<?php
Dat zou inderdaad ook kunnen en is niet eens zo verkeerd. Dit is inderdaad een optie.
Je hebt gelijk dat 1 de ene keer bij 'male' hoort en de andere keer bij 'wit'. Dus daarom dacht ik dus aan een getDescription method. Dus op deze manier. Wat vind jij hiervan?
echo 'Dos is een ' . gender::getDescription(1);
Wat vind je dan beter? getDescription() of from()? Voor jouw idee valt in ieder geval zeker ook iets te zeggen.
Wat beftreft jouw code... (en nu moet ik oppassen als onopgeleid programmeur... gniffel gniffel)
Wat ik er persoonlijk niet prettig aan vind, is dat je de constanten ook in de from method benoemt. Op 2 plekken dus. Dat betekent dat als je ooit een constante toevoegt, wijzigt of verwijdert, je dit op 2 plekken moet doen.
Mijn idee is dan om een abstract class te maken met als child de Gender class. In die abstracte class zet ik dan die from() of getDescription() method. Via een reflection class haal ik een array met de constanten op. Die array draai ik om, zodat de keys de values worden. Die array sla ik vervolgens op in de abstracte class zodat deze slechts eenmaal gegenereerd hoeft te worden. En aan de hand van de value die binnenkomt, geef ik dan de naam van de constant terug. Op deze manier kan ik die abstracte class hergebruiken, en hoef ik in de child classes alleen nog maar de constants toe te voegen. Goed idee?
We beginnen met een vraag over een naam, van 2 dingen die totaal niks met elkaar te maken hebben, namelijk landennamen en kleuren. Vervolgens gaat de vraag niet meer over deze dingen, maar over geslachten. Een half uurtje daarna gaat het ook niet meer over de naam en binnen 5 uur zijn we weer terug op de vraag in je vorige topic...
Wat doe jij nu eigenlijk op de 4e regel als ik vragen mag?
static $names?
Ik wil trouwens geen foreach loop gebruiken maar een class property (als dat lukt) met als keys de values en als values de namen van de constants. Dan kan ik kijken of de value is set, en dan meteen de naam van de constant teruggeven. Dan ben ik die foreach loop kwijt namelijk.
"static $names?"
PHP heeft ook statische variabele binnen functies, het zelfde idee als statische variabele binnen classes alleen minder flexibel omdat het alleen binnen die functie te gebruiken is.
"Ik wil trouwens geen foreach loop gebruiken maar een class property (als dat lukt) met als keys de values en als values de namen van de constants. Dan kan ik kijken of de value is set, en dan meteen de naam van de constant teruggeven. Dan ben ik die foreach loop kwijt namelijk."
Prima, sla array_flip($constants) op in de statische variabele en je kunt isset() gebruiken. Het was alleen als voorbeeld/inspiratie bedoeld.
>> PHP heeft ook statische variabele binnen functies, het zelfde idee als statische variabele binnen classes alleen minder flexibel omdat het alleen binnen die functie te gebruiken is.
Ik moest even 3x kijken wat je nu bedoelde, maar ik snap 'm nu. Wat grappig :) Wist ik niet eens.
>> Prima, sla array_flip($constants) op in de statische variabele en je kunt isset() gebruiken. Het was alleen als voorbeeld/inspiratie bedoeld.