[PHP] Slimme if-statements?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Exception
  • Registratie: Augustus 2006
  • Laatst online: 11-09 09:52
Beste Tweakers,

Misschien kunnen jullie mij helpen met het volgende vraagstuk. Ik combineer graag if-statements in PHP zodat ik niet onnodig met accolades hoef de smijten. Echter vraag ik mij af of de volledige if-statement wordt gelezen/uitgevoerd wanneer de eerste voorwaarde al false is. Denk bijvoorbeeld aan het volgende:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// (Variabele 1)
function TelAantalGebruikers() { 
  // Opvragen d.m.v. sql-query en geef terug als integer
}

// (Variabele 2)
$variabele2 = false;

// Mogelijkheid 1
if ($variabele2 && TelAantalGebruikers() > 10) {
 return true;
} else {
 return false;
}

// Mogelijkheid 2
return ($variabele2 && TelAantalGebruikers() > 10);


Nu is mijn vraag als volgt. Bij de if-statements in beide mogelijkheden wordt er eerst gekeken of $variabele2 = true. Wanneer deze false is, wordt TelAantalGebruikers() dan nog aangeroepen? Is PHP "slim" genoeg om te weten dat het tweede statement al niet meer meeteld omdat de eerste al false is en het && moet zijn?

Ik hoop dat jullie mij kunnen volgen. Ik zou dit graag zeker willen weten omdat dit natuurlijk een hoop performanche kan schelen.

Alvast bedankt! :)

[ Voor 3% gewijzigd door Exception op 13-08-2013 21:18 ]


Acties:
  • 0 Henk 'm!

  • dipje2
  • Registratie: Juni 2006
  • Laatst online: 23-07 23:31
In alle eerlijkheid, ik weet niet of PHP dit doet.
Maar PHP _zou_ het wel moeten doen! Dus je mag er niet van uit gaan dat je TelAantalGebruikers functie zal worden uitgevoerd.

Als PHP nu nog 'te dom' is om het wel uit te voeren, kan dat zomaar gepatched worden later. Of met sommige JIT PHP optimizers werkt je scriptje opeens anders.

Ik weet dat de meeste 'echte' talen (beter gezegd: echte compilers) hier wel 'slim genoeg' voor zijn en de call niet zullen uitvoeren.

Acties:
  • 0 Henk 'm!

  • Xesxen
  • Registratie: Juli 2009
  • Laatst online: 22:12
Dit is toch makkelijk te controlleren door echo/print in TelAantalGebruikers toe te voegen? :)

Rare vogel in spe


Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 22:40
Exception schreef op dinsdag 13 augustus 2013 @ 21:15:
Echter vraag ik mij af of de volledige if-statement wordt gelezen/uitgevoerd wanneer de eerste voorwaarde al false is.
Nee.

Nu wilde ik hier een bron uit de PHP manual invoegen, maar het schijnt niet echt uitgebreid gedocumenteerd te zijn. Slechts een referentie in een code snippet helaas. Maar je had het natuurlijk ook gewoon zelf kunnen uitproberen ;)
dipje2 schreef op dinsdag 13 augustus 2013 @ 21:20:
Maar PHP _zou_ het wel moeten doen!
[..]
Ik weet dat de meeste 'echte' talen (beter gezegd: echte compilers) hier wel 'slim genoeg' voor zijn en de call niet zullen uitvoeren.
Spreek je jezelf niet tegen hier? In ieder geval is PHP wel 'slim genoeg' om hem niet uit te voeren, en je kan er van uit gaan dat dat niet gewijzigd wordt.

[ Voor 24% gewijzigd door hostname op 13-08-2013 21:23 ]


Acties:
  • 0 Henk 'm!

  • ERIKvanPAASSEN
  • Registratie: September 2006
  • Laatst online: 09-08 17:46

ERIKvanPAASSEN

Bug Killer

&& is een lazy operator, net als ||. Dit houdt in dat bij 'statement1 && statement2' het tweede statement niet wordt geëvalueerd indien statement1 al false is.

Iets soortgelijks geldt dus voor de || operator. Zoek maar eens op 'lazy evaluation' of 'lazy operators' in combinatie met PHP.

Zie ook: http://stackoverflow.com/...p-lazy-boolean-evaluation. Blijkbaar heet het ook wel 'short-circuit evaluation'.

[ Voor 19% gewijzigd door ERIKvanPAASSEN op 13-08-2013 21:25 ]


Acties:
  • 0 Henk 'm!

Verwijderd

En dat is dan een PHP framework developer? Serieus, kap daar dan maar mee. Als je dit al niet kunt uitzoeken, waarom programmeer je dan in godsnaam voor anderen?

Ironie? De ironie is dat het "lazy" heet.

Acties:
  • 0 Henk 'm!

  • Exception
  • Registratie: Augustus 2006
  • Laatst online: 11-09 09:52
@Cheatah: Blijf wel een beetje aardig wil je... Ik heb het inderdaad ook zelf op verschillende manieren geprobeerd, maar wilde toch graag een bevestiging alvorens ik dit soort constructies wil gaan gebruiken. Ben overigens geen Framework developer, maar ontwikkel op basis van het Li3 (lithium) framework, vandaar ;-)

Bedankt voor alle reacties. Heb nu wat zoektermen waar ik me in kan gaan verdiepen, dat was meer de bedoeling van deze post ;-)

[ Voor 18% gewijzigd door Exception op 13-08-2013 21:51 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Exception schreef op dinsdag 13 augustus 2013 @ 21:29:
Ik heb het inderdaad ook zelf op verschillende manieren geprobeerd
Dat heb je niet. Het stond niet in de openingspost en er was ook op geen enkele manier indirect af te leiden dat je iets geprobeerd had, dus je hebt het niet op verschillende manieren geprobeerd.

Je bent dat er nu een beetje bij aan het jokken. Ik denk dat we een thema hebben.

Acties:
  • 0 Henk 'm!

  • bwerg
  • Registratie: Januari 2009
  • Niet online

bwerg

Internettrol

hostname schreef op dinsdag 13 augustus 2013 @ 21:22:
[...]

Nee.

Nu wilde ik hier een bron uit de PHP manual invoegen, maar het schijnt niet echt uitgebreid gedocumenteerd te zijn. Slechts een referentie in een code snippet helaas. Maar je had het natuurlijk ook gewoon zelf kunnen uitproberen ;)
"Zelf uitproberen" is riskant. Zo vindt je dat het lazy werkt, maar blijkt het op een andere machine niet zo te werken. In bijvoorbeeld C is er nogal wat ongedefinieerd gedrag en ik heb geen ervaring met PHP maar wat ik erover lees is het daarin niet veel 'beter'. Al zou het wel heel slecht zijn als dit niet gedefinieerd is.

Heeft geen speciale krachten en is daar erg boos over.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19:58

.oisyn

Moderator Devschuur®

Demotivational Speaker

Niet "ook wel", dat is gewoon de correcte term. Lazy evaluation is een veel breder concept.
dipje2 schreef op dinsdag 13 augustus 2013 @ 21:20:
In alle eerlijkheid, ik weet niet of PHP dit doet.
Maar PHP _zou_ het wel moeten doen! Dus je mag er niet van uit gaan dat je TelAantalGebruikers functie zal worden uitgevoerd.
Van een taal mag je bepaald deterministisch gedrag verwachten, ook van PHP, zeker als ze gedocumenteerd zijn. Het is dus niet alleen dat je er niet vanuit mag gaan dat ie niet aangeroepen wordt, het is het tegenovergestelde: je mag er vanuit gaan dat ie niet wordt aangeroepen. Als je al niet meer op dat soort dingen kan vertrouwen dan mag je de taal wel weggooien.

[ Voor 48% gewijzigd door .oisyn op 14-08-2013 00:07 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • HyperioN
  • Registratie: April 2003
  • Laatst online: 24-05 15:42
Als je && gebruikt en de eerste statement is niet waar; wordt de tweede ook niet uitgevoerd.

Makkelijke testcase:
PHP:
1
2
3
4
5
6
7
8
9
10
11
error_reporting(E_ALL); //zodat we notices te zien krijgen
ini_set('display_errors',1);

if($foo == 'bar'){
  //geeft: Notice: undefined variable '$foo'
}

if(isset($foo) && $foo=='bar'){
  //geeft geen notice.
  // isset($foo) geeft false dus de tweede statement wordt niet uitgevoerd.
}


/edit: ik ben een beetje laat zie ik (venster te lang open laten staan); antwoord was al gegeven. Met excuus.

[ Voor 11% gewijzigd door HyperioN op 14-08-2013 00:10 ]


Acties:
  • 0 Henk 'm!

  • Exception
  • Registratie: Augustus 2006
  • Laatst online: 11-09 09:52
Verwijderd schreef op dinsdag 13 augustus 2013 @ 22:56:
[...]

Dat heb je niet. Het stond niet in de openingspost en er was ook op geen enkele manier indirect af te leiden dat je iets geprobeerd had, dus je hebt het niet op verschillende manieren geprobeerd.

Je bent dat er nu een beetje bij aan het jokken. Ik denk dat we een thema hebben.
Slechte dag gehad ofzo? Waarom moet er op Tweakers altijd minimaal één reactie zijn met afkrakende inhoud. Dus als er niets over "geprobeerd te hebben" in mijn startpost staat, heb ik het niet geprobeerd? Waar slaat dat nou op. Heb je een glazenbol ofzo? Ik heb het wel geprobeerd, maar kon het alleen niet 100% bevestigen. Ik hoor graag de mening van anderen voordat ik zelf tot een besluit kom. Daar is toch niets mis mee? Normale reacties geven is ook mogelijk hoor, kijk maar eens naar de rest. Misschien kun je hier een voorbeeld aan nemen.

[ Voor 8% gewijzigd door Exception op 14-08-2013 09:48 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19:58

.oisyn

Moderator Devschuur®

Demotivational Speaker

Exception schreef op woensdag 14 augustus 2013 @ 09:27:
Dus als er niets over "geprobeerd te hebben" in mijn startpost staat, heb ik het niet geprobeerd? Waar slaat dat nou op. Heb je een glazenbol ofzo?
Ja dat is wel een beetje de regel als je hier een topic opent. Dat je aangeeft wat je geprobeerd hebt, dus als je iets niet aangeeft dan heb je het ook niet geprobeerd, óf je topic voldoet niet aan de eisen. Dat laatste kan natuurlijk niet, dus moet het de eerste wel zijn ;)

Maar alle gekheid op een stokje, ik moet Cheatah wel een beetje gelijk geven. Het staat namelijk ook gewoon duidelijk in de documentatie, dus ik kan me niet van de indruk onttrekken dat je er niet heel veel moeite in hebt gestoken.
PHP:
1
2
3
4
5
6
// foo() will never get called as those operators are short-circuit

$a = (false && foo());
$b = (true  || foo());
$c = (false and foo());
$d = (true  or  foo());

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Barryke
  • Registratie: Augustus 2003
  • Laatst online: 13-08 11:14

Barryke

blauw

Wat je bedoelt heet "short circuit boolean evaluation"
Wikipedia: Short-circuit evaluation

En zoals een documentatie comment zegt, dat staat in PHP altijd aan.
http://php.net/manual/en/language.operators.logical.php

En ja, dat had je zelf kunnen testen..

Error 304: Please hit any user to continue.


Acties:
  • 0 Henk 'm!

  • iWebDev
  • Registratie: Juli 2013
  • Laatst online: 20-05 21:06
PHP gaat niet verder zodra de IF statement false is.Dus in het geval van jou als $variabele2 false is wordt TelAantalGebruikers niet meer aan geroepen en knalt direct in de else (als die er is).

Daarom moet je (zoals hierboven aangegeven) ook if(isset($foo) && $foo == "Iets") doen. Als foo niet bestaat gaat hij direct in de else en voorkomt dus dat er een vergelijking wordt gemaakt met iets wat niet bestaat.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19:58

.oisyn

Moderator Devschuur®

Demotivational Speaker

Is het vandaag mosterd-na-de-maaltijd-post-dag ofzo?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • -DarkShadow-
  • Registratie: December 2001
  • Niet online
Nog makkelijkere testcase:
code:
1
1 && print("Dit print niet");


Edit: oeps, echo is geen expression inderdaad.

[ Voor 36% gewijzigd door -DarkShadow- op 14-08-2013 16:13 . Reden: Wat een ophef ;-) ]

Specialist in:
Soldeerstations
Oscilloscoop


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
-DarkShadow- schreef op woensdag 14 augustus 2013 @ 14:44:
Nog makkelijkere testcase:
code:
1
1 && echo "Dit print niet";
Het kan aan mij liggen en ik doe dit uit m'n hoofd, maar volgens mij print dat dus wel.

edit: het is überhaupt geen geldige PHP blijkt als ik het wil runnen. Het volgende wel:
PHP:
1
1 && print("Dit print dus wel");

[ Voor 19% gewijzigd door HuHu op 14-08-2013 14:59 ]


Acties:
  • 0 Henk 'm!

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 04-09 19:14
HuHu schreef op woensdag 14 augustus 2013 @ 14:57:
[...]

Het kan aan mij liggen en ik doe dit uit m'n hoofd, maar volgens mij print dat dus wel.
Klopt als een bus..

Sowieso mag je geen echo doen maar moet je print doen ( echo is geen echte functie in PHP..)

PHP:
1
2
3
<?php
( 1 && print("Dit print") )
?>


PHP:
1
2
3
<?php
( 0 && print("Dit print NIET") )
?>

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:33

MueR

Admin Tweakers Discord

is niet lief

Enfer schreef op woensdag 14 augustus 2013 @ 14:58:
[...]
Sowieso mag je geen echo doen maar moet je print doen ( echo is geen echte functie in PHP..)
Kul, waar haal je die onzin vandaan? Echo is inderdaad een language construct, maar die mag je gewoon gebruiken hoor. Of wilde je zeggen dat je require en include ook niet gebruikt?

Oh ja, bovenal: print is net zo hard een language construct. Moet je misschien even nalezen. http://www.php.net/print

[ Voor 13% gewijzigd door MueR op 14-08-2013 15:02 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 04-09 19:14
MueR schreef op woensdag 14 augustus 2013 @ 15:01:
[...]

Kul, waar haal je die onzin vandaan? Echo is inderdaad een language construct, maar die mag je gewoon gebruiken hoor. Of wilde je zeggen dat je require en include ook niet gebruikt?
Kul, ik heb het over dit voorbeeld natuurlijk.. Alleen het idee al dat je echo HELEMAAL niet mag gebruiken zou lachwekkend zijn.. :z Natuurlijk praten we hier over context, anders kun je net zo goed bij elke post de TS gaan quoten .. :X (ik quote zelfs nog mijn voortganger om de context duidelijk te maken, maar ik had inderdaad voor de mierenliefhebbers hier het woordje 'hier' toe kunnen voegen...)

En trouwens, als je in de echo documentatie kijkt lees je:
echo (unlike some other language constructs) does not behave like a function
sneren mag je achterwege laten

[ Voor 51% gewijzigd door MueR op 14-08-2013 15:11 ]


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
MueR schreef op woensdag 14 augustus 2013 @ 15:01:
[...]

Kul, waar haal je die onzin vandaan? Echo is inderdaad een language construct, maar die mag je gewoon gebruiken hoor. Of wilde je zeggen dat je require en include ook niet gebruikt?

Oh ja, bovenal: print is net zo hard een language construct. Moet je misschien even nalezen. http://www.php.net/print
PHP:
1
1 && echo "Dit print niet";


Parse error: syntax error, unexpected 'echo' (T_ECHO) on line 1

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
PHP:
1
1 && (echo "Dit print niet"); == 1 && void == ??


PHP:
1
1 && print("Dit print wel"); == 1 && 1 == true

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:33

MueR

Admin Tweakers Discord

is niet lief

HuHu schreef op woensdag 14 augustus 2013 @ 15:03:
[...]

Parse error: syntax error, unexpected 'echo' (T_ECHO) on line 1
Dat het voorbeeld nergens op slaat en niet runt snap ik ook. Het ging me meer om de nogal idiote uitspraak dat je een language construct niet zou mogen gebruiken

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
MueR schreef op woensdag 14 augustus 2013 @ 15:05:
[...]

Dat het voorbeeld nergens op slaat en niet runt snap ik ook. Het ging me meer om de nogal idiote uitspraak dat je een language construct niet zou mogen gebruiken
Och... je moet het dus zo lezen:
Enfer schreef op woensdag 14 augustus 2013 @ 14:58:

Sowieso mag je geen echo doen in deze situatie maar moet je print doen ( echo is geen echte functie in PHP..)

Acties:
  • 0 Henk 'm!

  • Afvalzak
  • Registratie: Oktober 2008
  • Laatst online: 31-08 12:02

Afvalzak

Zet jij mij even buiten?

Fijn dat de modjes hier wel goed lezen 8)7

[ Voor 3% gewijzigd door Afvalzak op 14-08-2013 15:09 ]

Last.fm | Code Talks


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Enfer schreef op woensdag 14 augustus 2013 @ 15:03:
[...]
Kul, ik heb het over dit voorbeeld natuurlijk.. Alleen het idee al dat je echo HELEMAAL niet mag gebruiken zou lachwekkend zijn.. :z Natuurlijk praten we hier over context, anders kun je net zo goed bij elke post de TS gaan quoten .. :X
In welke context mag ik dan geen echo gebruiken maar moet ik print gebruiken?

De enige context die ik namelijk zie is 1 regel in een voorbeeld.

Acties:
  • 0 Henk 'm!

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 04-09 19:14
Gomez12 schreef op woensdag 14 augustus 2013 @ 15:10:
[...]

In welke context mag ik dan geen echo gebruiken maar moet ik print gebruiken?

De enige context die ik namelijk zie is 1 regel in een voorbeeld.
Wat een non-discussie dit.. Ik wil alleen aangeven dat je in het gegeven codevoorbeeld geen echo maar print moet gebruiken..

Als je zelf wilt weten wat precies het verschil is, knock yourself out ;)
http://nl3.php.net/echo
http://nl3.php.net/print

Acties:
  • 0 Henk 'm!

  • BarôZZa
  • Registratie: Januari 2003
  • Nu online
Verwijderd schreef op dinsdag 13 augustus 2013 @ 21:25:
En dat is dan een PHP framework developer? Serieus, kap daar dan maar mee. Als je dit al niet kunt uitzoeken, waarom programmeer je dan in godsnaam voor anderen?

Ironie? De ironie is dat het "lazy" heet.
Tegenwoordig noemen mensen zich al PHP/HTML5/JavaScript/JQuery/MySQL/framework developer als ze Wordpress met een template en wat plugins kunnen installeren ;(

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19:58

.oisyn

Moderator Devschuur®

Demotivational Speaker

Gomez12 schreef op woensdag 14 augustus 2013 @ 15:10:
[...]

In welke context mag ik dan geen echo gebruiken maar moet ik print gebruiken?

De enige context die ik namelijk zie is 1 regel in een voorbeeld.
In die context dus. Is het nou echt zo moeilijk om een post te interpreteren :?. && is een operator, die verwacht aan beide kanten een expressie. echo is geen expressie maar een statement, en mag je daar dus niet gebruiken.
Haakt toevallig goed in wat ik gisteren typte in een ander topic: .oisyn in "De Devschuur Coffee Corner - Iteratie 3"

[ Voor 29% gewijzigd door .oisyn op 14-08-2013 16:10 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50

BikkelZ

CMD+Z

Er bestaat ook een & operator die beide kanten eerst uitvoert voor te gaan vergelijken maar daar moet je mee opletten. Namelijk niet alles wat normaal als false evalueert in PHP werkt dan nog. Alleen booleans of de integers 0 en 1 werken uit mijn blote hoofd dan nog zoals je verwacht.

Overigens is het sowieso een slechte stijl om niet alles wat in een if statement staat eerst te laten evalueren naar een boolean. Dus niet ($blaLength) maar ($blaLength > 0) bijvoorbeeld, of if (is_numeric($blaLength)), naar gelang wat je verwacht te gaan gebruiken.

-----

Wel een boel sjachrijn in dit topic zeg, heeeerlijk 8)

[ Voor 5% gewijzigd door BikkelZ op 14-08-2013 18:07 ]

iOS developer


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

BikkelZ schreef op woensdag 14 augustus 2013 @ 18:06:
Er bestaat ook een & operator die beide kanten eerst uitvoert voor te gaan vergelijken maar daar moet je mee opletten.
& is helemaal niet een equivalent van && (of 'and') en moet je ook niet zo zien.

& is een bitwise operator en die moet uiteraard eerst beide zijden evalueren om te beoordelen wat de uitkomst moet zijn (en hoe welke zijde gecast moet worden, want je kan in php uiteraard strings met 1 en 0 erin ook and-en...). Maar simpel gezegd: 1 & 3 => 1
Namelijk niet alles wat normaal als false evalueert in PHP werkt dan nog. Alleen booleans of de integers 0 en 1 werken uit mijn blote hoofd dan nog zoals je verwacht.
Strings van 0 en 1 mag ook hoor :P (dus "0011" & "0110" => "0010" als ik het goed heb onthouden).

Overigens, nog een reactie op de topicstart: Je moet niet moeite doen om het aantal accolades te beperken. Je moet moeite doen om de leesbaarheid en volgbaarheid van je code het beste te krijgen.

Je kan ook zoiets doen met early returns:

PHP:
1
2
3
4
if(!$variable2)
  return false;

return TelAantalGebruikers() > 10;


Voor dit specifieke voorbeeld voegt het niet zoveel toe t.o.v. mogelijkheid2, maar het kan wel duidelijkheid toevoegen als je meer dan 2 statements hebt of als je if's anders heel breed zouden worden.

edit:

Wel goed voorbeeld geven :P

Acties:
  • 0 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
ACM schreef op woensdag 14 augustus 2013 @ 19:31:
[...]
Maar simpel gezegd: 1 & 2 => 3
Je bent in de war met | (bitwise or). 1 & 2 => 0 en 1 | 2 => 3

Zie: http://php.net/manual/en/language.operators.bitwise.php

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19:58

.oisyn

Moderator Devschuur®

Demotivational Speaker

ACM schreef op woensdag 14 augustus 2013 @ 19:31:
& is een bitwise operator en die moet uiteraard eerst beide zijden evalueren om te beoordelen wat de uitkomst moet zijn (en hoe welke zijde gecast moet worden, want je kan in php uiteraard strings met 1 en 0 erin ook and-en...).
Niet helemaal, als de linkerkant 0 is dan hoeft de rechterkant feitelijk niet meer geëvalueerd te worden. Hetzelfde bij | als alle bits op 1 staan.
Maar simpel gezegd: 1 & 2 => 3
Da's 0 ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

.oisyn schreef op woensdag 14 augustus 2013 @ 20:18:
Niet helemaal, als de linkerkant 0 is dan hoeft de rechterkant feitelijk niet meer geëvalueerd te worden. Hetzelfde bij | als alle bits op 1 staan.
Ik denk dat het in php altijd wel gedaan wordt, alleen al ivm de type checks.
Da's 0 ;)
Oeps :P

Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50

BikkelZ

CMD+Z

Ik denk dat de discussie die uit mijn opmerking voortvloeit eigenlijk al wel aangeeft dat & op die manier gebruiken best wel wat onverwachte hoofdpijn kan geven :P

iOS developer

Pagina: 1