Vraag over if conditie icm isset

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Guido  -

Guido -

17/05/2019 23:24:13
Quote Anchor link
Hallo,

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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$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
 
PHP hulp

PHP hulp

19/03/2024 03:48:22
 
- Ariën  -
Beheerder

- Ariën -

17/05/2019 23:32:50
Quote Anchor link
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. ;-)
Gewijzigd op 17/05/2019 23:33:18 door - Ariën -
 
Rob Doemaarwat

Rob Doemaarwat

18/05/2019 08:45:22
Quote Anchor link
Ipv isset kun je dan ook nog de Null Coalescing Operator gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<div'.( ($mijn_setting ?? "no") == "yes" ? ' class="class-one"' : ' class="class-two"').'>
  // doe iets
</div>

Wel korter, niet altijd leesbaarder ...
 
- Ariën  -
Beheerder

- Ariën -

18/05/2019 08:49:16
Quote Anchor link
... alleen geschikt vanaf PHP 7 :-)
 
Rob Doemaarwat

Rob Doemaarwat

18/05/2019 09:28:15
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

18/05/2019 10:12:23
Quote Anchor link
Er zijn nog wel een aantal mensen die blijven steken op PHP 5.6.
 
Guido  -

Guido -

18/05/2019 12:17:20
Quote Anchor link
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
 
Thomas van den Heuvel

Thomas van den Heuvel

18/05/2019 15:00:27
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>
 
Ozzie PHP

Ozzie PHP

19/05/2019 04:34:12
Quote Anchor link
Thomas van den Heuvel op 18/05/2019 15:00:27:

Bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$class
= ($mijn_setting == 'yes') ? 'class-one' : 'class-two';
?>
Gewijzigd op 19/05/2019 20:46:34 door Ozzie PHP
 
- Ariën  -
Beheerder

- Ariën -

19/05/2019 09:41:57
Quote Anchor link
Huh? Er gaat wat mis in je bericht, Ozzie?
 
Thomas van den Heuvel

Thomas van den Heuvel

19/05/2019 10:16:59
Quote Anchor link
@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 ;).
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/05/2019 20:35:14
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

19/05/2019 20:48:28
Quote Anchor link
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 :-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.