[PHP]Tableau dans les fonctions

Tableau dans les fonctions [PHP] - PHP - Programmation

Marsh Posté le 10-12-2010 à 11:17:54    

Bonjour,
 
Je viens de voir le sujet précédent [Lister les variables d'une fonction] et du coup une question me taraude. (Je suis débutant en PHP) J'ai des fonctions qui traitent des tableaux. Je passe donc un tableau en argument et mes fonctions me retournent un tableau.
Pour savoir si il y a une erreur, je teste si la sortie de la fonction est un array... Je trouve ça moche.  
 
Donc ma question est comment bien procéder pour créer des fonctions qui traitent des tableaux?

Reply

Marsh Posté le 10-12-2010 à 11:17:54   

Reply

Marsh Posté le 10-12-2010 à 11:55:53    

que pourrait-il y avoir comme erreur ? Peux-tu donner un exemple ?
 
Le plus propre serait qu'une erreur dans la fonction lance une exception, au lieu de renvoyer autre chose qu'un tableau.

Reply

Marsh Posté le 10-12-2010 à 12:10:30    

Code :
  1. function connection($ip, $os, $mdp_or_login, $mdp,$port) { // Appelle les fonctions de connection et insrcits les erreurs dans un log.
  2. switch ($port) {
  3.  case 22:
  4.   $err = connection_ssh($ip, $os, $mdp_or_login, $mdp);
  5.   break;
  6.  case 23:
  7.   $err = connection_telnet($ip, $os, $mdp_or_login, $mdp);
  8.   break;
  9.  default :
  10.   $err = -1;
  11.   break;
  12. }
  13. $log = fopen('log_equipement.txt','a+');
  14. fwrite($log,$ip.":".$port.PHP_EOL);
  15. fclose($log);
  16. if (is_array($err)) return ($err);
  17. else {
  18.  $log = fopen('log.txt','a+');
  19.  $deb_log = date('[d-m-Y H:i:s] ')."[".$ip.":".$port."] ";
  20.  switch ($err) {
  21.   case -1:
  22.    fwrite($log, $deb_log."Connexion échouée".PHP_EOL);
  23.    break;
  24.   case -2:
  25.    fwrite($log, $deb_log."Authentification échouée".PHP_EOL);
  26.    break;
  27.   case -3:
  28.    fwrite ($log, $deb_log."Commande échouée".PHP_EOL);
  29.    break;
  30.  }
  31.  fclose ($log);
  32.  return (FALSE);
  33. }
  34. }


Code :
  1. function connection_ssh($ip, $os, $login, $mdp) {
  2. if ($connection =@ssh2_connect($ip,22)) {
  3.  if (@ssh2_auth_password($connection, $login,$mdp)){
  4.   if ($stream =@ssh2_exec($connection, commande_os($os))) {
  5.    stream_set_blocking($stream,true);
  6.    return (explode(PHP_EOL,stream_get_contents($stream)));
  7.   }else return (-3);
  8.  }else return (-2);
  9. } else return (-1);
  10. }


Et j'en ai une dizaine de fonctions comme ça qui traitent des tableaux.
 
je ne peux pas lancer d'exception parce que même si il y a une erreur, il ne faut pas que le script s'arrête mais j'ai quand même besoin de savoir si il y a eu une erreur.  
 
Sinon tout marche actuellement mais je me posais juste la question suite à la remarque de olivthill

Citation :

Enfn, une fonction, en PHP ou C, ou dans les autres langages, ne doit pas retourner un tableau, c'est une erreur de débutant et une erreur qui est parfois encouragée par des profs ignorants

Message cité 1 fois
Message édité par air_bobi le 10-12-2010 à 12:11:09
Reply

Marsh Posté le 12-12-2010 à 22:52:14    

Ne stresse pas pour cette remarque : c'est n'importe quoi (re-jette un oeil au thread :D )
 
exemple dans la doc PHP de fonction qui renvoie des tableaux :
http://php.net/manual/fr/function.explode.php
http://fr2.php.net/manual/fr/function.preg-replace.php
http://fr.php.net/manual/fr/function.array-filter.php
 
etc... il y en a des centaines.
 
Pour ton problème, il y a plusieurs solutions, de la meilleur à la moins bonne :
1) lance une exception dans la fonction et utilise try/catch dans le corps appelant
2) retourne false et teste si la valeur de retour est différent de false avec l'operation de comparaison typé !== (bien qu'un peu bizarre si on vient de langages typés, c'est une pratique en cours dans les fonctions PHP
3) tester si c'est un array n'est si "dramatique" que ça vu le code environnant

Reply

Marsh Posté le 21-12-2010 à 19:38:30    

air_bobi a écrit :

[code]
 
Sinon tout marche actuellement mais je me posais juste la question suite à la remarque de olivthill

Citation :

Enfn, une fonction, en PHP ou C, ou dans les autres langages, ne doit pas retourner un tableau, c'est une erreur de débutant et une erreur qui est parfois encouragée par des profs ignorants



 
copié collé d'un article de 1976
 
tu fais comment pour envoyer des données en mvc a ta vue ? t(envoie 12000 variables et tu donnes du isset partout ?  
 
faut arreter de nous sortir des ponfices de l'epoque du web 0,1 sur IE2 sous windows 3.11...
 
une fonction renvoie ce qu'elle veut. le reste ce sont des croyances esoteriques propagées par des profs ignorants qui donnent cours mais n'ont plus rien programmer (dans le sens vendu ) depuis 1902.  
 
faut arreter de repeter des trucs sans les comprendre....
 
ps et d'ailleurs ca fait un petit moment que je cherche sur gogol le moindre article qui m'affirme ce pretexte. je n'en trouve aucun.  
et surtout , je voudrais bien que l'on me donne une justification a cela.  pour l'instant  ce ne sont que des affirmations peremptoires.


Message édité par mobil12 le 21-12-2010 à 19:53:12
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed