lege string
1) Je dwingt dat het argument een array is. Dan heb je het over typecasten? In dat geval... je geeft een verkeerd argument mee, een string in plaats van een array. Nu typecast je de string naar een array. Maar wat schiet je daar nu mee op? Het gaat nog steeds niet werken.
2) Oke, jij controleert of de keys bestaan. Ik doe dat niet. Op het moment dat er in de method een niet bestaande key wordt aangeroepen, klapt de parser eruit en krijg ik een foutmelding die mij precies vertelt wat er fout gaat, in welk bestand en op welke regel. Ik geef toe, jij krijgt waarschijnlijk een nettere foutmelding... maar we krijgen nog steeds allebei een foutmelding. Alleen jouw foutmelding houdt in dat er iedere keer als de method wordt aangeroepen er 3x gecontroleerd moet worden of de juiste key is geset.
Mij lijkt mijn methode efficiënter. Een aantal zaken zul je altijd moeten controleren zoals ik eerder heb gezegd. Maar je hoeft, in mijn optiek en onder de omstandigheden waarin ik bezig ben, niet altijd alles te controleren. Maar goed, het gaat er niet om wie wel of niet gelijk heeft. Een discussie als deze is vooral nuttig om extra inzichten te krijgen.
Gewijzigd op 20/10/2013 14:47:41 door Ozzie PHP
2) Nee, de PHP parser klapt er niet uit. En daar zit 'm juist het probleem. De parser denkt, hé laat ik Ozzie helpen en maar null terug geven, geeft ook nog een kleine warning, en gaat gewoon vrolijk verder. Jij komt met een vreemd resultaat en vraagt je af, wat heb ik verkeerd gedaan?
Ander geval. Je wilt ergens de boolean false aan geven, maar gebruikt per ongeluk 'false'. PHP denkt, hé hij wil een boolean, maar krijgt een string laat ik Ozzie eens helpen en zet 'false' om in true. Daarna gaat hij lekker verder, dit keer zelfs geen notice, en jij komt weer met een vreemd resultaat. Waar ligt de fout? Je gaat de klasse bekijken, de klassen die die gebruikt, code isoleren en ten slotte ontdek je dat je simpelweg 'false' hebt ingevuld.
Nu zul je vast denken, dat overkomt mij niet. Als er iets fout gaat ga ik eerst kijken of ik wel echt false heb ingevuld. Maar als je een argument van de een op de andere functie overgeeft met zo nu en dan kleine aanpassingen ben je echt wel de weg kwijt waar het probleem ligt. Dan is een strikte validatie uberhandig, aangezien je meteen weet in welke functie het fout is gegaan. Dan hoef je alleen nog maar max. 50 regels te debuggen.
Thanks voor je voorbeeldjes Wouter. Ik ga er nog eens over nadenken... ;)
Even voor mijn beeld, myFunc(array $options) levert een foutmelding op als ik hem aanroep met myFunc(true)?
@Ozzie,
Je zegt in dit topic dat je gebruikersinvoer controleert op het juiste type, volgens mij is gebruikersinvoer altijd een string. Hoe controleer jij of die string op de juiste wijze naar bv een integer geparst kan worden.
Ger van Steenderen op 20/10/2013 15:51:48:
@Wouter,
Even voor mijn beeld, myFunc(array $options) levert een foutmelding op als ik hem aanroep met myFunc(true)?
Even voor mijn beeld, myFunc(array $options) levert een foutmelding op als ik hem aanroep met myFunc(true)?
Dat is ook de bedoeling, want je hebt een verkeerd type argument meegegeven.
Ger van Steenderen op 20/10/2013 15:51:48:
Je zegt in dit topic dat je gebruikersinvoer controleert op het juiste type, volgens mij is gebruikersinvoer altijd een string. Hoe controleer jij of die string op de juiste wijze naar bv een integer geparst kan worden.
Klopt, maar je kunt wel controleren of iets numeriek is of alleen letters bevat e.d. Daarnaast kan gebruikersinvoer ook ergens anders vandaan komen, bijv. uit een xml-bestand van een ander bedrijf. Alles wat je zelf doet hoef je niet te controleren. De rest wel.
Exact!
Ozzie PHP op 20/10/2013 15:57:24:
Dat is ook de bedoeling, want je hebt een verkeerd type argument meegegeven.
Ger van Steenderen op 20/10/2013 15:51:48:
@Wouter,
Even voor mijn beeld, myFunc(array $options) levert een foutmelding op als ik hem aanroep met myFunc(true)?
Even voor mijn beeld, myFunc(array $options) levert een foutmelding op als ik hem aanroep met myFunc(true)?
Dat is ook de bedoeling, want je hebt een verkeerd type argument meegegeven.
Lol, Ozzie verkleed als Wouter.
Lijkt mij wel dat dat de bedoeling is, maar ik wilde het zeker weten.
Quote:
Klopt, maar je kunt wel controleren of iets numeriek is of alleen letters bevat e.d. Daarnaast kan gebruikersinvoer ook ergens anders vandaan komen, bijv. uit een xml-bestand van een ander bedrijf. Alles wat je zelf doet hoef je niet te controleren. De rest wel.
Ger van Steenderen op 20/10/2013 15:51:48:
Je zegt in dit topic dat je gebruikersinvoer controleert op het juiste type, volgens mij is gebruikersinvoer altijd een string. Hoe controleer jij of die string op de juiste wijze naar bv een integer geparst kan worden.
Klopt, maar je kunt wel controleren of iets numeriek is of alleen letters bevat e.d. Daarnaast kan gebruikersinvoer ook ergens anders vandaan komen, bijv. uit een xml-bestand van een ander bedrijf. Alles wat je zelf doet hoef je niet te controleren. De rest wel.
Das een beetje algemenologie (klinkt als?).
Als ik een request doe naar de API van Mollie krijg ik een XML response, die hoef niet te valideren op het juiste type, dus kan je gewoon casten.
Wat ik schuingedrukt gemaakt heb in de quote is gevaarlijke instelling, Wouter heeft je daar ook al op gewezen en beargumenteert.
@Wouter
Nu weet ik het zeker ;-)
Gewijzigd op 20/10/2013 16:36:11 door Ger van Steenderen