Bonjour,
Une question d'organisation du code :
Soit un fichier CSV à importer.
Ce fichier étant utilisé par des humains, il faut faire un max de vérif avant de l'importer.
L'import se subdivise en plusieurs fonctions :
Maintenant, je veux afficher un joli msg d'erreur avec notamment le nom du fichier incriminé, je suis obligé de passer $sourceFile dans les différentes sous-fonctions (checkHeader et checkLines).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 // fonction principale. /** * $sourceFile : nom du fichier source * $destTable : nom de la table dans laquelle seront importées les données * $fields décrit la structure attendue */ function importCsv($sourceFile, $destTable, $fields) { list($header, $lines) = getCsvFile($sourceFile, $fields); // fait l'import brutal du fichier, et récupère d'un coté le header (où se trouvent les champs), et de l'autre les données elles-mêmes checkHeader($header, $fields); // vérifie les données du header checkLines($lines, $fields); // vérifie les données des lignes ... }
J'envisage plusieurs solutions :
- passer le nom du fichier fautif $sourceFile en paramètre. Or, ce paramètre n'est pas réellement nécessaire aux fonctions. Pas beau.
- intégrer le tout dans un objet, et mettre $sourceFile en variable membre. On appelle la "fonction" par le constructeur (ou la méthode statique).
On se balade donc avec un $this->sourceFile (ou un self::$sourceFile), mais surtout on utilise un objet à contre-emploi (à mon sens)
La meilleure solution (les fonctions incluses l'une à l'intérieur de l'autre, qu'on retrouve notamment en Pascal) n'existe pas en PHP
Détail : j'ai volontairement pris un cas simple. Il existe certains cas ou je me retrouve avec 3 ou 4 "paramètres" en plus, ce qui alourdi considérablement toutes les écritures.
Auriez-vous une autre approche plus élégant me suggérer ?
Comment faites-vous dans ce genre de cas ?
Yvan
Partager