Ik heb zojuist wat nieuws geleerd, en ik vroeg me af of jullie dit ook weten.

Soms heb je een simpele if else vergelijking, bijv. dit:

<?php
if (true) {
$foo = 'bar';
} else {
$foo = 'baz';
}
?>
Zo'n simpele vergelijking neemt best veel ruimte in beslag, en daarom vervang ik deze graag door:

<?php
$foo = true ? 'bar' : 'baz';
?>
Da's een stuk korter! Maar soms kan het niet op deze manier, bijv:

<?php
if (true) {
$foo = 'bar';
} else {
$bar = 'foo';
}
?>
Zijn toch best veel regels voor zo'n simpele vergelijking. Nu wist ik dat je met een enkele if-vergelijking (zonder else) dit kan doen:

<?php
if (true) $foo = 'bar'; // omdat het op 1 regel staat gebruik je geen accolades
?>
Maar wat gebeurde er zojuist. Gewoon voor de grap deed ik dit:

<?php
if (true) $foo = 'bar';
else $bar = 'foo';
?>
En dit werkt dus gewoon. Zonder enige accolade. Ik wist helemaal niet dat dat kon. Jullie wel?
Wouter, ik zou het in jouw voorbeeld dan ook op 1 regel zetten:

<?php
$foo = ['bar'];
if (isset($foo)) $foo[] = 'foo';
$foo[] = 'cat';
foreach ($foo as $f) echo $f;
?>
Ik vind dit goed te lezen, maar het is vooral ook een kwestie van gewenning en persoonlijke voorkeur.
vind ik nog minder leesbaar. En dan wil je een if statement in de foreach plaatsen. Dan moet je het halve script op zijn kop gooien.
ik ga er niet vanuit dat je telkens je code gaat aanpassen... maar nogmaals... het is geen must. Het is iets wat kan. De een vindt het leuk en de ander niet.
Ozzie PHP op 15/05/2013 17:55:33
ik ga er niet vanuit dat je telkens je code gaat aanpassen...


Ozzie PHP op 15/05/2013 17:14:25
Ik ga m'n code eens naspitten en kijken of ik wellicht her en der wat kan inkorten :)


Hahah... de ironie :D
Scherp Eddy ;)

Ik bedoelde dus de if-elsesjes haha...
Voor degenen die het interessant vinden. Ik heb besloten om mijn if-elsjes in te korten, maar alleen als zowel de if als de else op 1 regel passen.

Dus in plaats van dit:

<?php
if (true) {
$foo = 'bar';
} else {
$bar = 'foo';
}
?>

dit:

<?php
if (true) $foo = 'bar';
else $bar = 'foo';
?>

Maar indien de if en/of else meerdere regels heeft, dan handhaaf ik de accolades. Dit blijft dus hetzelfde:

<?php
if (true) {
$foo = 'bar';
$baz = false;
} else {
$bar = 'foo';
}
?>
Logisch, want het kan ook alleen maar bij 1 regel...
Niet helemaal waar, je kunt ook dit doen:

<?php
if (true) {
$foo = 'bar';
$baz = false;
} else $bar = 'foo';
?>
PHP 5.4: <?php $foo = !empty($bar) ?: 'foo'; ?>

Als $bar, wordt $foo automatisch $bar ;-) werd tijd, 5/10 in dit soort gevallen gebruik je $bar
Dat is al mogelijk sinds php 5.3 en dat zal niet werken. $foo zal de waarde 'foo' of true krijgen.

Reageren