Archief - probleempje in php

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Curahee Q

Legacy Member
Die code van 'wat' is inderdaad niet duidelijk. Maar als je de bladspiegel aanpast is een if toch veel duidelijker.

PHP:
<?php
$uur=time("G");

if ($uur>=6 AND $uur<12){
	echo "Goeie morgen en welkom bij ddbikes";
}
elseif ($uur>=12 AND $uur<18){
	echo "Goeie middag en welkom bij ddbikes";
}
elseif ($uur>=18 AND $uur<=23){
	echo "Goeie avond en welkom bij ddbikes";
}
else{
	echo "Goeie nacht bij ddbikes";
}
?>

blackrabbit

Legacy Member
Cycloon zei:
Hoezo is de switch case overzichtelijker?

Ze wordt totaal foutief gebruikt en bestaat uit meer regels, ik denk dat sommige mensen toch totaal andere dingen verstaan onder overzichtelijker dan mij.
Waarom is meer regels slechter/minder duidelijk?


teh_NiHiLiM zei:
howly shit :eek:

k'heb ier precies wa verwachtingen gecreëerd :help:


blijkbaar ben ik makkelijker geneigd om een switch te gebruiken ivglt de meeste anderen ^^
Waarom ?

zoals killgore zegt: leest makkelijker / is overzichtelijker.
is ook vlotter uit te breiden

geen uber-whitty oplossing waar iedereen op gehoopt had :doc:


best grappig zo'n uitgebreide discussie voor zo'n 'kleinigheidje' ^^


Ik wacht nog steeds op uw code :p

Cycloon

Legacy Member
blackrabbit zei:
Waarom is meer regels slechter/minder duidelijk?

Ik had wel gedacht dat iemand daar weer over ging vallen (like always). Het is de combinatie van beide punten dat mij geen reden geeft dat iets duidelijker zou zijn. Er staat praktisch hetzelfde dusja. Meer regels code is soms nuttig voor complexere zaken, maar als het duidelijk genoeg is verkies ik toch de kortere methodes.

teh_NiHiLiM

Legacy Member
ffs .. moet ik nu echt nog mijn variant gaan geven ook :D

mijn verschil met de rest van de codes:
valkuil-principe .. (of hoe het ook mogen heten)

PHP:
$uur = date("G")
switch ($uur)
{
	case $uur >=23:
	default:
		$out= "Goeie nacht bij ddbikes";
		break;
	case $uur >= 18:
		$out= "Goeie avond en welkom bij ddbikes";
		break;
	case $uur >= 12:
		$out= "Goeie middag en welkom bij ddbikes";
		break;
	case $uur >= 6:
		$out= "Goeie morgen en welkom bij ddbikes";
		break;
}
echo $out;

teh_NiHiLiM

Legacy Member
whoeps.. jah, d8 ff bij het herlezen da'k de 1e 2 regels kon samepakken :)
ff trg aangepast

Gurdt

Legacy Member
een switch is in dit geval overzichtelijker omdat het geheel draait om de toestand of de status van een bepaald gegeven
in het geval (CASE!) het zo laat is, doe da, in het geval het zo laat is, doe dit, ...

zeker als ge met 4 cases zit, zou k die in een switch steken, hoewel da natuurlijk niet mogelijk is als ge met strings werkt enz.

blackrabbit

Legacy Member
teh_NiHiLiM zei:
ffs .. moet ik nu echt nog mijn variant gaan geven ook :D

mijn verschil met de rest van de codes:
valkuil-principe .. (of hoe het ook mogen heten)

PHP:
$uur = date("G")
switch ($uur)
{
	case $uur >=23:
	default:
		$out= "Goeie nacht bij ddbikes";
		break;
	case $uur >= 18:
		$out= "Goeie avond en welkom bij ddbikes";
		break;
	case $uur >= 12:
		$out= "Goeie middag en welkom bij ddbikes";
		break;
	case $uur >= 6:
		$out= "Goeie morgen en welkom bij ddbikes";
		break;
}
echo $out;

Don't get me wrong: ik vind een switch ook leesbaarder, maar wou vooral uw 'superieure' oplossing bekijken, dewelke ik nog steeds 'vies' vind: vergelijkings-operatoren in een case statement = not nice.

Efficienter:
PHP:
$uur = date("G")
switch (floor($uur/6))
{
	case 3: //18->23.59
		$out= "Goeie avond en welkom bij ddbikes";
		break;
	case 2: //12 -> 17.59
		$out= "Goeie middag en welkom bij ddbikes";
		break;
	case 1: //6->11.59
		$out= "Goeie morgen en welkom bij ddbikes";
		break;
       case 0: //0 -> 05.59
		$out= "Goeie nacht bij ddbikes";
		break;

      default:
		$out= "Welkom bij ddbikes";
		break;
}
Floor is nodig omdat php blijkbaar propere quotient kan uitvoeren, maar is op zich een snelle operatie.

Voordeel van deze oplossing is dat er minder statements moeten uitgerekend worden => sneller ;-) Nu kan je natuurlijk wel iets zeggen over de leesbaarheid (hoewel de commentaar dat goed maakt).


Default toevoegen is altijd een goed idee.

teh_NiHiLiM

Legacy Member
blackrabbit zei:
Don't get me wrong: ik vind een switch ook leesbaarder, maar wou vooral uw 'superieure' oplossing bekijken, dewelke ik nog steeds 'vies' vind: vergelijkings-operatoren in een case statement = not nice.

om niet in het zelfde straatje te blijven denken :crazy:
en als het toch steeds beter (of korter) moet...

PHP:
$greet=array("nacht","morgen en welkom","middag en welkom","avond en welkom");
echo "Goede".$greet[floor( date("G")/6 )]." bij ddbikes";

blackrabbit

Legacy Member
teh_NiHiLiM zei:
om niet in het zelfde straatje te blijven denken :crazy:
en als het toch steeds beter (of korter) moet...

PHP:
$greet=array("nacht","morgen en welkom","middag en welkom","avond en welkom");
echo "Goede".$greet[floor( date("G")/6 )]." bij ddbikes";

rofl, had dit in een edit geschreven maar had blijkbaar nog niet op 'opslaan' geklikt :)

Anyway, de code die ik nog had geschreven:

En als we dan toch zo bezig zijn, dit is nóg efficiënter dan een switch-statement:
PHP:
$out[0]="nacht";
$out[1]="morgen";
$out[2]="middag";
$out[3]="avond";
$out=$out[floor(date("G")/6)];

Maar goed, m'n punt was dat vergelijkingsstatements in switch-cases 'vies' zijn ;-)

By extension wil ik eigenlijk aankaarten dat heel wat (PHP-) developers amper denken aan efficientie (& dan klagen dat hun hosting traag werkt :))

stelly

Legacy Member
blackrabbit zei:
rofl, had dit in een edit geschreven maar had blijkbaar nog niet op 'opslaan' geklikt :)

Anyway, de code die ik nog had geschreven:

Leuk bij het maken, kutjob voor de mensen die het moeten aanpassen na u :D

blackrabbit

Legacy Member
Steek dat in een abstractie heh. Voeg wat commentaar toe en code is 100% duidelijk.
99.% van de PHP scripts worden trouwens door de eigenaar zelf onderhouden.

passero

Legacy Member
blackrabbit zei:
Steek dat in een abstractie heh. Voeg wat commentaar toe en code is 100% duidelijk.
99.% van de PHP scripts worden trouwens door de eigenaar zelf onderhouden.

Euhm... zit gij in de IT of studeert ge nog?

Denk dat bijna iedereen die in de IT zit wel kan beamen dat uw statement dikke zever is.

Ik werk al +/- 4 jaar en heb nog nooit een project van 0 uit de grond moeten stampen. Altijd verbouwen op een bestaande applicatie waar ge dan modules toevoegd en... code van andere moet gebruiken/aanpassen/debuggen,...

stelly

Legacy Member
Ik had geluk van na een jaar al een groot project op mijn eentje van 0 te mogen beginnen. Maar na 3 jaar zijt ge blij dat ge ooit in den beginne duidelijke code hebt gebruikt die ge verticaal kunt lezen.
Probeer altijd ingewikkelde code te vermijden (binnen rede). Het ziet er slim uit, het is meestal zelfs slim maar gij of de persoon na u gaat er miserie mee krijgen.

blackrabbit

Legacy Member
passero zei:
Euhm... zit gij in de IT of studeert ge nog?

Denk dat bijna iedereen die in de IT zit wel kan beamen dat uw statement dikke zever is.

Ik werk al +/- 4 jaar en heb nog nooit een project van 0 uit de grond moeten stampen. Altijd verbouwen op een bestaande applicatie waar ge dan modules toevoegd en... code van andere moet gebruiken/aanpassen/debuggen,...
Ow please, op het net wordt PHP net heel vaak gebruikt voor hobby-sites, die vaak ineen worden gestoken door mensen met weinig ervaring waardoor die code de server onnodig zwaar belast. Hier op het forum zie je ook wel regelmatig dergelijke code passeren (vaak in de vorm van logge of onnodige herhaling van SQL-statements).

En dan nog: steek die 'complexe' code achter een deftige abstractie en niemand heeft er last van. Dan staat er in uw code immers simpelweg print_welcome_message() oid. Zie niet in wat dáar onduidelijk aan is. Dat doen die pakketten waar jij het over hebt trouwens ook: alles mooi abstraheren (tenminste, dat hoop ik toch, anders inderdaad een hell om te onderhouden/uitbreiden).

Bovenstaande code los tussen de rest smijten is natuurlijk niet proper, maar dat geldt voor die switch evengoed.



Eigenlijk draait alles om abstractie (maakt vervangen van trage code immers makkelijker) en ook hier gaan heel veel hobbyisten in de fout. Met deftige abstracties maakt het inderdaad weinig uit of je in het begin ergens een inefficiente datastructuur/algoritme hebt gebruikt (dat bvb sneller te implementeren was dan de snellere versie), maar het blijft een goed idee om vanaf het begin na te denken over mogelijke optimalisaties.
Lange switch-statements moeten IMHO altijd vermeden worden.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan