Vond een snelle (OR) notatie wijze die ik met jullie wil delen.

Normale check bijvoorbeeld

<?php
If (isset($var)) {
   $newValue = $var;
} else {
   $newValue = 'some_value';
}
//normale if short notatie is dan
$newValue =(isset($var))?$var:'some_value';

//Een andere check die men zelden ziet is de OR check

isset($var)|| $var = 'some_value';
// als var leeg is krijgt het 'some_value'
$newValue = $var;

?>


Moeilijk is het niet en het geeft een goed leesbare vergelijking
Klopt in eerste instantie omdat hij met boolean komt, nu heb ik haken geplaatst en moet het ook met toewijzing werken. De meest simpele werkt zonder meer en heb ik veelvuldig in gebruik.
Na de extra haken zou dit $newValue = ((isset($var)) || 'some_value'); ook moeten werken
>> Na de extra haken zou dit $newValue = ((isset($var)) || 'some_value'); ook moeten werken

Nee, ook niet.

Zit je met "zou moeten werken" maar wat te raden of ben je aan het trollen?
Goed gezien Ward. Dit zal nooit werken aangezien je bij een positieve test de output van isset in $newValue stopt. En isset geeft altijd een boolean terug.

@Cees S: wellicht voortaan eerst even testen voordat je dit soort constructies plaatst ;)
Klopt, even in mijn eigen sources moeten kijken en het gewijzigd.
Het blijft volgens mij wel een hele mooie vergelijking

werkend in gebruik is

<?php
$config['width'] = 150;
isset($config['width']) || $config['width'] = 120;		
echo  $config['width'];// even een echo voor result, nu 150, if config['width'] not set 120
?>
?>




[size=xsmall]Toevoeging op 14/02/2015 18:02:57:[/size]

Kan iemand mij uitleggen waarom dit wel werkt

<?php 
isset($config['width']) || $config['width'] = 120;		
echo  $config['width']; //echo's 120
?>

en navolgend een boolean geeft en helaas niet werkt

<?php 
$var = (isset($config['width']) || $config['width'] = 120);		
echo  $var; //echo boolean 1
?>


Op zich ben ik al heel blij met de deze mogelijkheid
isset($config['width']) || $config['width'] = 120;

Er is zoiets als kortere code... en er is zoiets als leesbaarheid.

Ik kan niet direct overzien wat er in zo'n "OR" statement gebeurt, en wat gebeurt er als een assignment "false" oplevert?

Als ik dit soort code zie zou mijn eerste ingeving zijn om weg te sturen van zo'n opzet, en de desbetreffende programmeur vragen stellen over zijn beweegredenen voor het schrijven van onleesbare code.

korter !== beter
Ik zie eigenlijk nou niet echt het nut om iets zo te controleren.
Even vertalen naar simpel Nederlands:

$config['width'] = 150; $config breedte = 150.
 Als $config breedte geset is, (Dat is ie al, want hij heeft een waarde van 150)
      OF $config with heeft een waarde van 120
 Laat $config with zien.

Hier gaat iets mank. Want waarom wil je in hemelsnaam iets wat al een vaste waarde heeft een controle of hij daadwerkelijk wel bestaat. Dat is niet logisch.

Dan ga je nog een stapje verder:
Je maakt een nieuwe variabele aan die je eerst controleert of hij bestaat, OF een waarde heeft van 120.
Dan is het eigenlijk wel logisch dat de variabele de eerste controle doet, de tweede controle is niet meer van belang. Dus de variabele word een boolean.

Maar wat wil je bereiken?
Want ik heb het idee dat je iets aan het zoeken bent wat veeeeeeel makkelijker kan.
<?php
isset($config['width']) || $config['width'] = 120;
?>
Hierin geeft isset() true of false.
Indien true dan hoeft de rest achter de OR niet meer te worden uitgevoerd en blijft $config['width'] ongewijzigd..
Indien false dan wordt de rest wel uitgevoerd. $config['width'] krijgt een (nieuwe) waarde. En een gelukte toekenning geeft true.

<?php
$var = (isset($config['width']) || $config['width'] = 120);
?>
Idem als hierboven.
Echter het resultaat, dus of true of false, dat stop je in $var.
Maar het resultaat van een toekenning is toch tevens de toegekende waarde?
$whatever = false; (dit statement)
is equivalent met
false

Hoe moet ik de toekenning van een ongeinitialiseerde variabele met een waarde die "equivalent" is met false interpreteren in dit geval?
false || false

lolwut?

Het probleem is dat niet direcht duidelijk is wat de bedoeling van de programmeur is. Dan moet je nadenken over:
- wat de bedoeling (waarschijnlijk) was en
- of dit ook daadwerkelijk gebeurt (variabelen na afloop altijd een correcte waarde hebben)

Dit lijkt mij ook geen handige aanpak indien er hier of elders bugs in je scripts zitten. Het resultaat van debugging hiervan zal waarschijnlijk (en hopelijk) resulteren in het weg-refactoren van dit soort constructies.

EDIT: de crux van dit alles is waarschijnlijk dat je lazy evaluation op een verkeerde manier gebruikt (misbruikt).
Dit zijn de eventuele mogelijkheden:
<?php
// geeft true
$var = (true || n.v.t.);
$var = (false || true);

//geeft false
$var = (false || false);
?>

Reageren