IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Accès tableau associatif dans une fonction.


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 155
    Points : 94
    Points
    94
    Par défaut Accès tableau associatif dans une fonction.
    Bonjour, toujours en redécouverte du php que j'ai abandonné il y a bien longtemps...

    je crée un tableau qui va contenir des clés 'token-type', 'token_color' ... entr'autres.
    et j'essaye d'y acceder dans une fonction...

    La compilation ne semble pas d'accord avec
    var $zclass="token_".$tab['token_type'];

    Si c'est le fait qu'elle ne connaisse pas 'token_type' qui est initialisé dans une autre fonction , comment puis-je faire?
    merci d'avance.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function gettokenclass(&$tab)
        { 
    	var $zclass="token_".$tab['token_type'];	
    	if ($tab['token_type']=='SAT') $zclass .="_".$tab['token_color'];
    	return $zclass;
        }
    ici $tab['token_type'] contient normalement une chaine de caractères par exemple 'SAT'.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Enlève "var".
    Cette syntaxe ne sert pas a declarer une variable dans une fonction et est même obsolète dans son usage normal (déclarer un membre de classe).
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 155
    Points : 94
    Points
    94
    Par défaut
    exact ! Je l'avais enlevé dans une fonction similaire se compile plus loin... du coup je n'avais pas penser à cela...
    merci ,

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Au passage PHP est interprété et pas compilé.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 155
    Points : 94
    Points
    94
    Par défaut
    il n'y a pas 2 passes? pas d'optimisation?

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Il est possible de compiler PHP, ce qu'a fait Facebook avec HHVM, mais à la base PHP est "juste" interprété.
    Si tu utilises un moteur de template, il peut y avoir un cache des templates, et autres choses du genre, mais en dehors de ça, PHP ne brille pas par ses capacités d'optimisation
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 155
    Points : 94
    Points
    94
    Par défaut
    merci pour l'info.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 155
    Points : 94
    Points
    94
    Par défaut
    Pendant que j'y suis ... je code actuellement via Gedit...; j'ai ouvert un post sur le forum Ajax pour avoir des conseils sur l'editeur à employer (completion, etc...)...
    Si tu peux y passer faire un tour et me donner ton avis? ou le faire ici? Eclipse est trop lent à démarrer, Gedit a cet avantage de s'ouvrir vite, je cherche quelquechose de simple avec de la reactivité, mais plus de fonctions que Gedit. (genre completion des champs, des fonctions, etc...)
    merci d'avance.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 155
    Points : 94
    Points
    94
    Par défaut
    ... on m'a conseillé Sublime... c'est excellent.

  10. #10
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Sublime text est effectivement... sublime pour des petits projets.

    Au passage, y a-t-il une raison pour que tu passe le paramètre par référence ici?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function gettokenclass(&$tab)
    Tu ne modifies pas le paramètre dans la fonction, et pourtant c'est la seule justification (bancale) de l'utilisation d'une référence. Une référence en PHP n'est pas la même chose qu'une référence en C++. Il n'y a pas la même optimisation, et parfois c'est même le contraire.

    Sans compter que passer une référence, c'est faire de la programmation par effets de bords, avec toutes les conséquences incontrôlables que cela implique. C'est comme si tu utilisais des variables globales.

  11. #11
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Juste pour compléter, il n'y a quasiment pas de différences de performances entre un passage de variable par valeur et par référence. Le moteur PHP utilise une optimisation interne appelée "Copy-on-write" qui ne duplique pas la variable tant que cette dernière n'est pas modifiée. Tant qu'elle reste en lecture dans le code de la fonction, c'est la référence du paramètre en argument qui est utilisée.

    Dans ton bout de code $tab est justement qu'en lecture dans la fonction gettokenclass...

  12. #12
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Pour l'éditeur tu devrais jeter un œil à Atom.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 155
    Points : 94
    Points
    94
    Par défaut
    Pour le &$tab, oui je n'avais pas fait attention... je croyais que ca évitait une copie du tableau en parametre, alors que si on mettais le &, il n'y avait pas de copie... une vieille habitude d'optimisation... qui n'a donc pas lieu d'être?

    merci pour les conseils sur les editeurs:
    j'ai installé Sublime 2.02, Netbean 7(mais long à démarrer, si vous avez le lien adéquate pour la version 8, je suis preneur) /// pour atom, il n'est apperemment pas dans les dépôts par défaut (je ne trouve qu'atom4, atomix)... mais je vais profiter de ton lien.

  14. #14
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Comme dit plus haut, PHP optimise déjà la copie pour toi grâce au copy on write: il n'y a pas de copie lors d'un passage en paramètres, la copie n'est effectuée que si la variable est ensuite modifiée dans la fonction, ce qui n'est pas ton cas.

    Netbeans est une autre catégorie que Sublime, c'est un IDE, pas un éditeur de texte. Tu n'auras pas la même légéreté, mais tu auras beaucoup, beaucoup plus de fonctionnalités. C'est pour ça que j'ai dit que Sublime est excellent pour des petits projets.

    Netbeans 8 est dispo sur leur site officiel. Dans les IDE, je trouve que PHPstorm est largement meilleur que Netbeans, mais PHPstorm est payant (quoique si tu acceptes de servir de beta testeur, tu peux prendre la version EAP qui est gratuite pour 1 mois, mais ce mois gratuit se renouvelle à chaque nouvelle version, et il y a au moins une nouvelle version par mois).

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 155
    Points : 94
    Points
    94
    Par défaut
    merci pour ces infos.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 155
    Points : 94
    Points
    94
    Par défaut
    Par contre... je ne peux plus modifier le titre en SOLVED.... peut etre pcq "Sabotage" a modifié le premier post?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Retourner un tableau dans une fonction
    Par oranoutan dans le forum Débuter
    Réponses: 14
    Dernier message: 05/10/2007, 13h39
  2. retour d'un tableau dans une fonction
    Par FlyByck dans le forum Delphi
    Réponses: 3
    Dernier message: 19/01/2007, 00h00
  3. Réponses: 1
    Dernier message: 28/12/2006, 17h02
  4. [langage] appel d'un tableau dans une fonction
    Par donny dans le forum Langage
    Réponses: 11
    Dernier message: 13/11/2006, 16h17
  5. Accéder à un tableau dans une fonction
    Par valanagrid dans le forum C++
    Réponses: 10
    Dernier message: 18/09/2006, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo