Lezen van alle variablen in een string/array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

G P

G P

27/01/2019 13:18:16
Quote Anchor link
Ik had het ooit al eens gepost enkele jaren geleden maar vind het niet terug :/
Er is toen een oplossing gegeven.

Het gaat om het lezen van variablen die in een array moeten zijn.

function readIt($data){
}

// Correct
$test = readIt(array('a', 'b', 'c'));

// Probleem
$test = readIt('a', 'b', 'c');

Hoe kan ik het probleem omzetten in een array?
 
PHP hulp

PHP hulp

28/03/2024 11:08:47
 
Bart Smulders

Bart Smulders

27/01/2019 13:32:11
Quote Anchor link
Graag verwijs ik je naar dit onderwerp.
 
Rob Doemaarwat

Rob Doemaarwat

27/01/2019 13:32:16
Quote Anchor link
Zoiets?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
function readIt($data){
  if(!is_array($data)) $data = func_get_args();
  //rest van functie
}
 
G P

G P

27/01/2019 13:39:21
Quote Anchor link
Dank u Rob !!
 
Ozzie PHP

Ozzie PHP

27/01/2019 18:27:32
Quote Anchor link
@G P

Wat je nu doet is invoerfouten herstellen. Beter kun je gewoon een foutmelding genereren als het fout gaat. Een programmeur denkt nu ... ooooh, ik mag gewoon maar wat invullen. Het maakt niet uit wat ik doe. Je wil toch juist dat ie de correcte informatie aanlevert als array? Dan moet je niet vervolgens ook losse variabelen gaan accepteren. Dan wordt het allemaal erg verwarrend.
 
Rob Doemaarwat

Rob Doemaarwat

27/01/2019 20:16:25
Quote Anchor link
"Gemak dient de mens". Maar je moet met dit soort dingen wel oppassen dat het er niet teveel worden. Voor je het weet is je code de helft van de tijd bezig om parameters te "gokken".

Terzijde: zelf ben ik ook van de "gewoon correct aanleveren" school ("annotations" in docblocks, ook zo'n gruwel).
 
Ozzie PHP

Ozzie PHP

27/01/2019 22:33:25
Quote Anchor link
Precies ... als je een verkeerde parameter invoert, dan loopt het zaakje gewoon stuk en krijg je een foutmelding. Ik heb ook een tijd gekend waarin ik bezig was om alle mogelijke fouten die zich eventueel heel misschien wellicht zouden voordoen af te vangen via allerlei if/else-constructies gekoppeld aan de meest prachtige foutmeldingen. Het nadeel is echter dat alles langer duurt om te programmeren en dat je code minder overzichtelijk en logger wordt. Uiteindelijk ben ik daar dan ook mee opgehouden.
 
Thomas van den Heuvel

Thomas van den Heuvel

27/01/2019 22:53:44
Quote Anchor link
@Ozzie, een aantal kanttekeningen; er bestaat zoiets als overloading.

Soms is het handig dat je een willekeurig aantal argumenten kunt accepteren. Bijvoorbeeld als je PHP CLI / shellscripts schrijft.

Ozzie PHP op 27/01/2019 22:33:25:
Ik heb ook een tijd gekend waarin ik bezig was om alle mogelijke fouten die zich eventueel heel misschien wellicht zouden voordoen af te vangen via allerlei if/else-constructies gekoppeld aan de meest prachtige foutmeldingen.

Het lijkt mij makkelijker om een whitelist van geaccepteerde invoer op te stellen in plaats van een blacklist van invoer die ongeldig is. Op die manier kun je namelijk inderdaad bezig blijven.

It is hard to make anything idiot proof because idiots tend to be ingenious.

Ook is dit funest als dit zaken omtrent security regelt - vergeet je een geval is de veiligheid misschien om zeep.

Je hoeft ook niet eindeloos een gebruiker aan de hand te houden. Is de invoer fout, laat dan gewoon code op zijn bek gaan, niets mis mee. Of althans, dat is een keuze - ofwel je bent heel strict met deze invoer (ziet er iets tussen dat je niet kent: einde oefening) of je negeert deze gewoon.
Gewijzigd op 27/01/2019 22:56:41 door Thomas van den Heuvel
 
Ozzie PHP

Ozzie PHP

27/01/2019 23:05:40
Quote Anchor link
Uiteraard kunnen er situaties zijn waarin je wel meerdere datatypen wenst te accepteren, maar een functie readIt($data) waaraan je in plaats van 1 value meerdere values kunt meegeven is wat mij betreft niet echt duidelijk/wenselijk.

Je kunt inderdaad niet alles afvangen.

Wat je bijv. wel eens ziet, zijn dit soort zaken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

$file
= 'path/to/library/db/db.php';
if (!is_file($file)) {
  error_log('File: ' . $file . ' is missing.');
  exit('Er gaat iets fout');
}
else {
  require $file;
}


?>

Hartstikke mooi natuurlijk zo'n uitgebreide controle. Maar als die betreffende file gewoon een vast onderdeel is van je structuur/framework, dan is het natuurlijk ook keiharde onzin om zo'n controle uit te voeren. En als je dan per pagina-aanroep 50 van dit soort controles gaat doen, dan ben je volgens mij niet echt zinvol bezig. En toch zie je dit regelmatig gebeuren.
Gewijzigd op 27/01/2019 23:06:08 door Ozzie PHP
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.