[php] inefficiente if-statement *

Pagina: 1
Acties:
  • 35 views sinds 30-01-2008

  • p_m
  • Registratie: December 2000
  • Niet online
Ik heb een vraag hoe ik een stukje code efficiënter kan coden.

Om eerst een voorstelling van dit stukje code te geven: er zijn 3 mogelijke (numerieke) input-waardes: kijkbegin, kijkeind en kijkinterval. Daarvan hebben er 2 een waarde, maar je weet niet welke 2, vandaar dus dit stukje code:

PHP:
1
2
3
4
5
6
<?
if($kijkeind && $kijkbegin || $kijkeind == 0 && $kijkbegin 
|| $kijkeind && $kijkbegin == 0 || $kijkeind == 0 && $kijkbegin == 0){
doe(leuke,dingen);
}
?>


Maar je ziet al waar ik tegen aan loop, als je dmv if($var) checkt of de var een waarde heeft of niet, ziet ie de waarde 0 aan voor niets (ook vrij logisch), maar dat is nu net niet wat ik wil, omdat de input ook daadwerkelijk 0 kán zijn! Vandaar het omslachtige gecheck achter het if-gedoe.

Is dit niet op een betere en meer efficiënte manier te doen?

[ Voor 3% gewijzigd door p_m op 10-06-2003 15:11 ]

Putting the bit in Biton since 1997


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
Vergis ik me als ik constateer dat je if-conditie nu altijd naar true evalueert? (Bedoelde je geen '===' in plaats van '=='?)

  • Marcj
  • Registratie: November 2000
  • Laatst online: 21-08 21:30
PHP:
1
if(($kijkeind || $kijkeind == 0) && ($kijkbegin || $kijkbegin == 0)) {}

is iig al een stuk korter ;)

maar het testen op 0 is toch hetzelfde al NULL in PHP? Dus dit zou altijd waar zijn

Verwijderd

edit:

volgens mij komt hier altijd true uit

dus geen 'if', maar gewoon doe(leuke,dingen);

gebruiken ;)

[ Voor 131% gewijzigd door Verwijderd op 10-06-2003 15:19 ]


  • p_m
  • Registratie: December 2000
  • Niet online
Marcj schreef op 10 juni 2003 @ 15:14:
is iig al een stuk korter ;)
Hehe... *p_m needs more coffee. Bedankt!
maar het testen op 0 is toch hetzelfde al NULL in PHP? Dus dit zou altijd waar zijn
In de ene richting wel, maar in de andere niet. Als je NULL true test kan het 0 zijn, maar als je 0 true test is het geen NULL.

Putting the bit in Biton since 1997


  • p_m
  • Registratie: December 2000
  • Niet online
Verwijderd schreef op 10 juni 2003 @ 15:15:
volgens mij komt hier altijd true uit, behalve als er nix in zit
En dat probeer ik dus te testen.

Putting the bit in Biton since 1997


Verwijderd

maak ff een waarheidstabel,
en kijk bij welke "regels" er true (of false) uit moet komen...

Verwijderd

gebruik dan empty($var) ofzo

en als er nix inzit is ie eigenlijk 0 (false dus)

ik snap het probleem niet zo

als de waardes FALSE of TRUE zijn, maakt niet uit welke combinatie, dan moet ie altijd te functie aanroepen.

Wat is het nut dan om ze TRUE of FALSE te zetten?

[ Voor 82% gewijzigd door Verwijderd op 10-06-2003 15:24 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Pak de volgende keer een normale topic-titel wil je?

Professionele website nodig?


  • p_m
  • Registratie: December 2000
  • Niet online
Verwijderd schreef op 10 June 2003 @ 15:20:
gebruik dan empty($var) ofzo
Nee, die geeft ook bij 0 TRUE... zie http://nl2.php.net/manual/nl/function.empty.php

[ Voor 39% gewijzigd door p_m op 10-06-2003 15:25 ]

Putting the bit in Biton since 1997


Verwijderd

misschien is isset($var) een oplossing?

  • p_m
  • Registratie: December 2000
  • Niet online
Verwijderd schreef op 10 June 2003 @ 15:26:
misschien is isset($var) een oplossing?
Ook al niet, die geeft bij 0 FALSE, net als NULL. Gewoon het omgekeerde van empty().

Putting the bit in Biton since 1997


  • p_m
  • Registratie: December 2000
  • Niet online
Ok, ik ben te sloom vandaag... hij geeft idd altijd TRUE... grrr. En testen op 0 is dus hetzelfde als testen op iets wat niet bestaat... nrrr... :(

Hoe kan je nou onderscheid maken tussen 0 en écht niets?

Ah fijn! Tussen quotes zetten did the job... waarom heb ik daar niet eerder aan gedacht? Ach, schrale troost, jullie ook niet ;)

[ Voor 40% gewijzigd door p_m op 10-06-2003 15:40 . Reden: spellcheck ]

Putting the bit in Biton since 1997


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
p_m schreef op 10 June 2003 @ 15:36:
Ok, ik ben te sloom vandaag... hij geeft idd altijd TRUE... grrr. En testen op 0 is dus hetzelfde als testen op iets wat niet bestaat... nrrr... :(

Hoe kan je nou onderscheid maken tussen 0 en écht niets?
Zoals ik al in mijn eerste reactie zei (die je vrolijk negeerde; die, ja): met === 0 kun je vergelijken met inachtname van de typen van de operands. Verder heb je natuurlijk isset. Allebei is dat in de PHP handleiding te vinden.
Ah fijn! Tussen quotes zetten did the job... waarom heb ik daar niet eerder aan gedacht? Ach, schrale troost, jullie ook niet ;)
Wat een stompzinnige oplosing. Dat jij daar voor kiest moet je zelf weten, maar wil je niet jouw domheid op mij (of anderen hier) projecteren door te suggereren dat jij het beter wist dan alle anderen die tot nu toe reageerden? Als je er voor zou kiezen om de reacties van anderen te lezen, dan zou je de goede oplossing al gevonden hebben.
p_m schreef op 10 June 2003 @ 15:27:
Ook al niet, die geeft bij 0 FALSE, net als NULL. Gewoon het omgekeerde van empty().
Heb je het ueberhaupt getest? |:(

[ Voor 10% gewijzigd door Soultaker op 10-06-2003 15:49 ]


  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 22-08 16:45
probeer is_numeric() of is_int() eens. Welke je echt moet hebben is afhankelijk van het type. Is je getal stiekem een string, gebruik dan is_numeric. Is het echt een int, gebruik dan is_int.
edit:

Alleen zijn die niet error_reporting(E_ALL) compatible als de var niet gedeclareerd is

[ Voor 22% gewijzigd door Sjaaky op 10-06-2003 15:53 ]


Verwijderd

if(($kijkeind || $kijkeind == "") && ($kijkbegin || $kijkbegin == "")) {} ??

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Waarom doe je niet gewoon isset en test je voor je daar een vreemde uitspraak over doet :?
PHP:
1
2
3
4
5
6
<?
$x = 0;
$y = false;
$z = NULL;
echo (int)isset($x), (int)isset($y), (int)isset($z);
?>

heeft als output 110 -> de 0 en de false worden dus wel degelijk als "set" gezien...

(zoals Soultaker je ook al duidelijk probeerde te maken)

[ Voor 12% gewijzigd door ACM op 10-06-2003 16:01 ]


  • p_m
  • Registratie: December 2000
  • Niet online
Vergeef mijn vergissing, maar flamen heeft geen zin Soultaker.

Putting the bit in Biton since 1997


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Dat je een topic opent met een nogal grove titel okee, dat je vervolgens negeert dat ik je daarop wijs okee, maar je hoeft niet de mensen te gaan beledigen die je goede oplossingen aangeven en die jij negeert. Op slot dus en ga je ff schamen.

Professionele website nodig?

Pagina: 1

Dit topic is gesloten.