Vraag over if conditie icm isset
Met onderstaande conditie voeg ik een bepaalde CSS class toe, afhankelijk van mijn_setting.
Code (php)
1
2
3
2
3
<div'.( (isset($mijn_setting) && $mijn_setting == "yes") ? ' class="class-one"' : ' class="class-two"').'>
// doe iets
</div>
// doe iets
</div>
Het werkt, maar ik vraag me af of het onderstaande deel correct gebruik is:
Normaal gesproken zou ik er een if statement van maken, maar dat geeft in dit geval een parse error (Parse error: syntax error, unexpected 'if').
Guido
Persoonlijk zou ik nooit no/yes als strings gebruiken, en gewoon op de booleans TRUE of FALSE afgaan. Straks gebruik je per ongeluk "Yes" dan dan sta je jezelf wezenloos te turen op een hoofdletter. ;-)
Gewijzigd op 17/05/2019 23:33:18 door - Ariën -
Null Coalescing Operator gebruiken:
Wel korter, niet altijd leesbaarder ...
Ipv isset kun je dan ook nog de Code (php)
1
2
3
2
3
<div'.( ($mijn_setting ?? "no") == "yes" ? ' class="class-one"' : ' class="class-two"').'>
// doe iets
</div>
// doe iets
</div>
Wel korter, niet altijd leesbaarder ...
... alleen geschikt vanaf PHP 7 :-)
PHP 7.0 is al weer sinds januari end-of-life (en 7.1 wordt ook al niet meer actief onderhouden). Ik mag toch hopen dat elke hoster langzamerhand wel eens over is vanaf 5.6 ... Andersom: als je probleem dus is dat je hierop een foutmelding krijgt heb je eigenlijk een ander, groter probleem.
Er zijn nog wel een aantal mensen die blijven steken op PHP 5.6.
Ik kom ook nog regelmatig (meestal WordPress) sites tegen die op 5.6 draaien, maar hosters pushen de betreffende mensen wel richting 7+.
Guido
Nu bepaal je inline welke class je gaat gebruiken, maar dit kun je ook vantevoren berekenen.
Daarnaast is het enige echte variabele deel de naam van de CSS-klasse. Je hoeft niet dynamisch te maken wat statisch is, en zou dit ook zo min mogelijk moeten doen om de scheiding tussen deze twee helder te houden. Je hebt PHP alleen nodig voor de dynamische delen, de statische delen zou je (en moet je, wat mij betreft) zoveel mogelijk buiten PHP houden.
Bijvoorbeeld:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$class = ($mijn_setting == 'yes' ? 'class-one' : 'class-two');
// deze informatie geef je bijvoorbeeld door aan een template
?><div class="<?php echo $class; ?>">
// doe iets
</div>
$class = ($mijn_setting == 'yes' ? 'class-one' : 'class-two');
// deze informatie geef je bijvoorbeeld door aan een template
?><div class="<?php echo $class; ?>">
// doe iets
</div>
Thomas van den Heuvel op 18/05/2019 15:00:27:
Gewijzigd op 19/05/2019 20:46:34 door Ozzie PHP
Huh? Er gaat wat mis in je bericht, Ozzie?
Ervoor: 'whatever'.(a ? b : c);
Of erna: (a ? b : c).'whatever';
Of allebei.
Het is niet verplicht om haken te zetten om het statement/predicaat "a", tenzij je dit doet om mogelijke dubbelzinnigheid in de voorrang van de onderdelen weg te nemen.
Maar mijn haken waren dus bewust zo geplaatst ;).
Belangrijkste opmerking blijft die van Thomas over het feit dat je niet allerlei business logic mee moet slepen naar je template. Eerst alles voorbereiden en dan je template uitspugen. Je weet dat je voor je template een dynamische class-naam nodig hebt dus zorg dat ie er dan ook ALTIJD is voordat je de HTML gaat maken. Een isset() is dan overbodig.
Thomas van den Heuvel op 19/05/2019 10:16:59:
Maar mijn haken waren dus bewust zo geplaatst ;).
Ah oké ... ik dacht dat je je had vergist :-)