Kom ihåg mig?
Home Menu

Menu


Dubbla utropstecken i PHP

 
Ämnesverktyg Visningsalternativ
Oläst 2010-06-29, 16:26 #1
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Standard Dubbla utropstecken i PHP

Har stött på en ovanlig sätt att använda utropstecknet (!) som används som negerande operator i PHP.

I en kodbit som jag hittade http://sourceforge.net/projects/phpexcelreader/ upptäcker jag dubbla utropstecken före vissa uttryck. Det skulle bli en dubbel negation men det verkar lite onödigt.
Effekten borde bli likadan med en enkel typecasting (bool)$expression eller?

Så här ser det ut på en hel del ställen:
Kod:
return !!$this->colInfo[$sheet][$col]['hidden'];
Nån som sett något liknande?
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-06-29, 18:23 #2
emilvs avatar
emilv emilv är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Feb 2004
Inlägg: 1 564
emilv emilv är inte uppkopplad
Bara ett inlägg till!
emilvs avatar
 
Reg.datum: Feb 2004
Inlägg: 1 564
Ja, effekten borde bli densamma som en typecast till bool. Jag har sett liknande ett par gånger tidigare. Vill du verkligen förvirra nästa programmerare slänger du på några utropstecken till!

Tydligast är annars att skriva just (bool) så det blir tydligt vad som händer. Vid en skumläsning kanske någon missar att det är två utropstecken, eller blir lika förvirrad som du angående syftet med koden.
emilv är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-06-29, 21:46 #3
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Ja, såg för gräsligt ut så jag körde sök och ersätt på skiten.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-06-30, 00:12 #4
studiox studiox är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2004
Inlägg: 1 356
studiox studiox är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2004
Inlägg: 1 356
Kanske inte samma sak, men kan det inte vara så att man försäkrar sig om att den inte får finnas, ungefär som
Kod:
if $apa === 0
studiox är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-06-30, 08:18 #5
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Citat:
Ursprungligen postat av studiox Visa inlägg
Kanske inte samma sak, men kan det inte vara så att man försäkrar sig om att den inte får finnas, ungefär som
Kod:
if $apa === 0
Nej, inte samma sak. === kollar om värdena är identiska, dvs typ int med värdet 0 i ditt fall. ! jämför mot något av värdena som PHP tycker motsvarar false, dvs tom sträng, false, 0, odefinierad variabel osv. Som redan sagts skulle en (bool)$var ge samma resultat, men då skulle man trevligt nog kunna se resultatet utan att spärra upp ögonen rejält.
Clarence är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-06-30, 09:23 #6
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Den används inte i frågesatser utan vid tilldelning av värden. Så jag antar att det är ett sätt att sätta typ på variabeln.

Eftersom skriptet ifråga jobbar mycket med att iterera över arrayer och författarna hoppat över den fina funktionen isset() så får man ett par ton notices om missade index när man kör. Blir till att skriva om och göra rätt. Det är nackdelen med att använda färdiga skript, man måste skriva om dem för att de ska fungera som man vill.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-06-30, 18:05 #7
studiox studiox är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2004
Inlägg: 1 356
studiox studiox är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2004
Inlägg: 1 356
Citat:
Ursprungligen postat av Magnus_A Visa inlägg
Den används inte i frågesatser utan vid tilldelning av värden. Så jag antar att det är ett sätt att sätta typ på variabeln.

Eftersom skriptet ifråga jobbar mycket med att iterera över arrayer och författarna hoppat över den fina funktionen isset() så får man ett par ton notices om missade index när man kör. Blir till att skriva om och göra rätt. Det är nackdelen med att använda färdiga skript, man måste skriva om dem för att de ska fungera som man vill.
Du menar skriva om för du ska slippa notices? :-)
studiox är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-07-01, 08:08 #8
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Citat:
Ursprungligen postat av Magnus_A Visa inlägg
Eftersom skriptet ifråga jobbar mycket med att iterera över arrayer och författarna hoppat över den fina funktionen isset() så får man ett par ton notices om missade index när man kör. Blir till att skriva om och göra rätt. Det är nackdelen med att använda färdiga skript, man måste skriva om dem för att de ska fungera som man vill.
En notice är en notice - inte en warning. För kodraden du postade blir den till och med (minimalt) mindre effektiv och ger mer kod om du skriver om den så att den inte ger notices om den ska ha exakt samma funktion (du får ersätta den med en if-sats med isset och samma/liknande kod igen).
Clarence är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-07-01, 11:53 #9
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Jag vill inga notices ha. Rent och snyggt ska det vara i loggarna.
Dessutom ska jag tydligen from php 5.3 kunna skriva
$resultat = (isset($variabel)) ? : $default;
istället för
$resultat = (isset($variabel)) ? $variabel : $default;
Alltid en förbättring.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-07-03, 22:34 #10
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
Citat:
Ursprungligen postat av Magnus_A Visa inlägg
Jag vill inga notices ha. Rent och snyggt ska det vara i loggarna.
Dessutom ska jag tydligen from php 5.3 kunna skriva
$resultat = (isset($variabel)) ? : $default;
istället för
$resultat = (isset($variabel)) ? $variabel : $default;
Alltid en förbättring.
Ser vi någon fördel med det här förutom att det är lite kortare att skriva? Jag tycker det är ett lite svårläst sätt som blivit än mer svårläst. Jag föredrar tydliga if-satser
jonny är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 16:27.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017