Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1011 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP]Tableau dans les fonctions

 

Sujet(s) à lire :
    - Lister les variables d'une fonction
 

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP]Tableau dans les fonctions

n°2041263
air_bobi
Posté le 10-12-2010 à 11:17:54  profilanswer
 

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?

mood
Publicité
Posté le 10-12-2010 à 11:17:54  profilanswer
 

n°2041280
Paulp
~, sweet ~
Posté le 10-12-2010 à 11:55:53  profilanswer
 

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.

n°2041287
air_bobi
Posté le 10-12-2010 à 12:10:30  profilanswer
 

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
n°2041680
smaragdus
whores, drugs & J.S. Bach
Posté le 12-12-2010 à 22:52:14  profilanswer
 

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

n°2043605
mobil12
Posté le 21-12-2010 à 19:38:30  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP]Tableau dans les fonctions

 

Sujets relatifs
Pb contenu html en PHPEnvoie d'une pièce jointe en PHP avec mail()...presque...
PHP commande FLASH[PERL] Probleme de splice avec un tableau a 2 dimensions
Actualiser une liste de données tirées d'une table Mysql en PHPProgrammation-traitement de fonctions mathématiques.
[PHP]SSH sur ciscoStructure + Tableau dynamique en langage C
Passage de tableau lors d'un changement de page.Coloration des bords d'une case d'un tableau avec plusieurs couleurs.
Plus de sujets relatifs à : [PHP]Tableau dans les fonctions


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR