Hallo,

Met onderstaande conditie voeg ik een bepaalde CSS class toe, afhankelijk van mijn_setting.


<div'.( (isset($mijn_setting) && $mijn_setting == "yes") ? ' class="class-one"' : ' class="class-two"').'>
  // doe iets
</div>


Het werkt, maar ik vraag me af of het onderstaande deel correct gebruik is:

$mijn_setting == "yes"


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
Je gebruikt nu een ternary syntax in PHP, die voor dergelijke in-line situaties zeer handig is.
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. ;-)

Ipv isset kun je dan ook nog de Null Coalescing Operator gebruiken:

<div'.( ($mijn_setting ?? "no") == "yes" ? ' class="class-one"' : ' class="class-two"').'>
  // 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.
Dank voor jullie reacties!

Ik kom ook nog regelmatig (meestal WordPress) sites tegen die op 5.6 draaien, maar hosters pushen de betreffende mensen wel richting 7+.

Guido
Je zou ook kunnen overwegen om dit soort (business) logica wat meer te scheiden van presentatie (logica).

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:
<?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>
Thomas van den Heuvel op 18/05/2019 15:00:27


Bijvoorbeeld:
<?php
$class = ($mijn_setting == 'yes') ? 'class-one' : 'class-two';
?>


Huh? Er gaat wat mis in je bericht, Ozzie?
@Ozzie, dat kan natuurlijk ook, maar als je altijd (a ? b : c) gebruikt kun je ook makkelijk strings hier aan breien.

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 ;).

Reageren