If statement herschrijven
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
<div class="box" id="error_message_box" style="<?php
if($errors == true){
echo "display: block;";
} else {
echo "display: none;";
}?>">
?>
<div class="box" id="error_message_box" style="<?php
if($errors == true){
echo "display: block;";
} else {
echo "display: none;";
}?>">
?>
Gewijzigd op 22/10/2015 19:29:01 door Salvatore Luciano
Code (php)
1
<div class="box" id="error_message_box" style="display: <?php echo ($errors == true) ? 'block' : 'none'; ?>;">
Gewijzigd op 22/10/2015 22:55:29 door Marthijn Buijs
Zoals je kunt zien heb ik ook een HEREDOC voorbeeld toegevoegd. Dit is met name handig als je enorme lappen tekst wilt opslaan in een variabele, maar niet je hoofd wilt breken over single/double quotes. HEREDOC ondersteund ook variabelen dus je kan je logica buiten je HTML houden en middels variabelen injecteren.
Het is ook mogelijk om een wrapper functie te schrijven waardoor je zelfs functie-aanroepen kunt doen vanuit je HEREDOC tekst, maar misschien gaat dat wat te ver voor dit voorbeeld.
Laat maar weten of dit is wat je zocht.
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
<?php
$displayStyle = "block";
if($errors !== true){
$displayStyle = "none;";
}
echo "<div class='box' id='error_message_box' style='display: {$displayStyle}'>";
/**
* Dit doet hetzelfde als hierboven, maar je kan zoveel vrije tekst neerzetten als je
* wilt zonder rekening te hoeven houden met quotes.
*/
$heredoc = <<<EOF
<div class='box' id='error_message_box' style='display: {$displayStyle}'>
EOF;
echo $heredoc;
?>
$displayStyle = "block";
if($errors !== true){
$displayStyle = "none;";
}
echo "<div class='box' id='error_message_box' style='display: {$displayStyle}'>";
/**
* Dit doet hetzelfde als hierboven, maar je kan zoveel vrije tekst neerzetten als je
* wilt zonder rekening te hoeven houden met quotes.
*/
$heredoc = <<<EOF
<div class='box' id='error_message_box' style='display: {$displayStyle}'>
EOF;
echo $heredoc;
?>
Gewijzigd op 23/10/2015 08:00:16 door Willem Liu
@Willem: waar komen die accolades vandaan? {$displayStyle}
Ozzie PHP op 23/10/2015 00:31:21:
@Willem: waar komen die accolades vandaan? {$displayStyle}
@Ozzie: De accolades gebruik ik in Strings om duidelijker aan te geven dat er een variabele staat. Dit is ondersteund in PHP Strings als deze met dubbele quotes wordt gemaakt "{$var}". Met enkele quotes werkt het niet.
Dit gaat dus fout: '{$var}'
Verscheidene editors, waaronder Notepad++, geven bij een String de accolades aan met een andere kleur.
Ik vind het persoonlijk daarom duidelijker om altijd accolades te gebruiken voor PHP variabelen in Strings.
Ik kan me voorstellen dat niet iedereen zit te wachten op de HEREDOC-syntax.
PHP Maarten op 23/10/2015 09:02:27:
Mijn voorbeeld was gewoon goed hoor?
Ik kan me voorstellen dat niet iedereen zit te wachten op de HEREDOC-syntax.
Ik kan me voorstellen dat niet iedereen zit te wachten op de HEREDOC-syntax.
M'n bericht was geen reactie op jou bericht, maar direct op de originele post.
Er valt mij echter iets anders op in de logica. Als je een div met id="error_message_box" hebt die alleen bij $errors == true wordt getoond, wordt die klaarblijkelijk uitsluitend gebruikt voor foutmeldingen. Het is dan niet efficiënt om die div te echoën en die vervolgens met display="none" te verbergen. Dan kan het bijvoorbeeld zo:
Code (php)
1
2
3
2
3
Ieder heeft natuurlijk zo zijn voorkeuren maar als we nu over templates gaan praten pak dan gewoon direct een template engine (Twig). Persoonlijk vind ik dat een variabele in PHP al heel goed herkenbaar is door de $. Daarnaast is het plaatsen van de variabele in de tekst wat langzamer als dat je het gewoon met punten (.) er tussen plakt.
Gewijzigd op 23/10/2015 10:06:39 door Frank Nietbelangrijk
Frank Nietbelangrijk op 23/10/2015 10:05:57:
>> Het voordeel van de oplossing van Willem is dat je later gemakkelijker een scheiding kunt aanbrengen tussen de view (die $displayStyle instelt) en een template (waarin {$displayStyle} alleen wordt geëchood).
Ieder heeft natuurlijk zo zijn voorkeuren maar als we nu over templates gaan praten pak dan gewoon direct een template engine (Twig). Persoonlijk vind ik dat een variabele in PHP al heel goed herkenbaar is door de $. Daarnaast is het plaatsen van de variabele in de tekst wat langzamer als dat je het gewoon met punten (.) er tussen plakt.
Ieder heeft natuurlijk zo zijn voorkeuren maar als we nu over templates gaan praten pak dan gewoon direct een template engine (Twig). Persoonlijk vind ik dat een variabele in PHP al heel goed herkenbaar is door de $. Daarnaast is het plaatsen van de variabele in de tekst wat langzamer als dat je het gewoon met punten (.) er tussen plakt.
@Frank, je hebt gelijk dat een . concatenatie marginaal sneller is dan variabelen in de String te plaatsen.
Wellicht een interessante discussie om te lezen over het nut versus performance van beide technieken: http://stackoverflow.com/questions/3316060/single-quotes-or-double-quotes-for-variable-concatenation
Uiteindelijk is de performance-impact zo gering dat onderhoudbaardheid/leesbaarheid van code wellicht een belangrijkere overwegingsfactor is.
Het gebruiken van templating engines is inderdaad een goed alternatief en zeker een meer "gevorderde" oplossing op de vraag van de originele poster.
Echter denk ik ook dat het goed is om van tevoren na te denken over het gebruik van frameworks. Als je weet dat je heel veel functionaliteit van een specifiek framework gaat gebruiken dan is het uiteraard logisch dat je het betrekt in je project. Maar gebruik je echter maar een kleine fractie ervan dan is de overhead van zo'n framework wellicht niet gewenst.
Al met al denk ik dat we Salvatore veel goede mogelijkheden hebben laten zien.
We zijn het eens hoor, de snelheidswinst is geen overgroot voordeel. Ik zie het dan ook als persoonlijke voorkeuren. Ik ben zelf groot voorstander van (een goed) framework maar alleen als je aan een nieuwe website / nieuw project gaat beginnen. Een bestaand project dat redelijk in elkaar steekt moet je waarschijnlijk lekker zo laten. Ik zie echter ook heel veel rampzalig geschreven websites die je absoluut niet wilt aanpassen. Ook dan is het wat mij betreft tijd voor herschrijven en een framework... Maar goed we dwalen af en ik wil dit topic niet kapen...
@Willem Liu: Hoi Willem, ik denk dat ik inderdaad moet gaan beginnen met het scheiden van HTML en PHP. Bedankt voor het voorbeeld van HEREDOC. Ik denk dat ik me hier maar eens wat in ga verdiepen. Ook jij hartstikke bedankt!