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 :
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
 ...
}
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).

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