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 :

Utilisation des références


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Par défaut Utilisation des références
    Salut tout le monde,

    j'ai l'habitude d'utiliser la syntaxe de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach($array as &$e) { ... }
    Mon collègue me dit que ce genre de syntaxe, bien que dans la doc, a tendance à planter avec de très gros tableaux. Pour lui, il arrive que le dernier enregistrement soit supprimé et remplacé par l'avant dernier.

    Et de même, le passage par référence or des fonctions, par exemple faire : est à éviter, car marche mal...

    Or personnellement je n'ai jamais eu de problème, pourtant je l'utilise régulièrement (en PHP 5.3, ou 5.2.x mini).

    Est-ce que vous avez des expériences de problèmes avec des passages par référence ? Dans quel cas ? Est-ce que je dois l'éviter ?

    Merci

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 683
    Par défaut
    Citation Envoyé par Halleck Voir le message
    Est-ce que vous avez des expériences de problèmes avec des passages par référence ? Dans quel cas ? Est-ce que je dois l'éviter ?
    pour ma part je n'utilise plus "&" depuis le passage à PHP 5 puisque maintenant les objets sont passés automatiquement par référence
    est ce que tu aurais un exemple de code détaillé ?

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach( $monTableau as &$maValeur ){... }
    Cette méthode n'a réellement d'intérêt que si tu appliques des modifs sur ton tableau au cours de ta boucle.
    Mais pour cela tu as des fonctions natives de PHP plus adaptées (array_map, array_walk)

    Avec cette méthode le danger peut venir d'une erreur d'inattention :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $tableau = range( 1 , 5 );
     
    foreach( $tableau as &$val ){
        $val = $val + 10;
    }
     
    print_r( $tableau );
     
    $val = 'toto';
     
    print_r( $tableau );
    Sinon pour ce qui est du deuxième argument. De vieux (très vieux) benchs (sur ce présent site si ma souvenance est bonne) faisaient apparaître qu'une copie de variable était plus rapide à créer qu'une référence. Est-ce encore d'actualité ? Aucune idée. Mais quoi qu'il en soit c'est sûrement pas une perte de perfs qui risque de plomber un site.

  4. #4
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Par défaut
    mathieu => non, justement car pour ma part je n'ai jamais eu de souci. Je sais que les objets sont passés par référence, mon problème n'est pas un problème de syntaxe, même si le titre du topic qui a été changé le laisse entendre...

    Petibidon => là encore mon "problème" n'est pas la syntaxe ou l'utilisation des références.

    Très simplement, dans ma boite on parcourt des centaines de milliers d'enregistrements, avec parfois des tableaux de la même taille. Mes collègues m'ont déconseillé d'utiliser le parcours de tableaux par référence en me disant que c'était mal geré en PHP.

    Ca me parait bizarre, et je voulais savoir si vous aviez déjà eu des problèmes avec les références sous PHP, non pas d'un point de vue de la syntaxe, mais bel et bien du comportement natif de PHP.

  5. #5
    Membre très actif Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Par défaut
    J'ai le souvenir d'avoir eu des problèmes de plantage lors de manipulations très tricky en utilisant des références sur des array, des éléments de array etc.

    Je crois savoir que certains bugs ont été corrigés depuis, car il y en avait. Tout comme le call-time pass by reference qui a été déprécié.

    php implémente le copy on write. Même lors de passages par copy (le comportement par défaut pour les POD et les array), php utilise du ref counting et ne "sépare" les variables que lorsqu'il y en a vraiment besoins.
    Toujours est-il que passage (ou assignement) par copy et passage par référence ont leur utilité propre. Il est tout à fait justifié d'employer les références quand on en a besoin. C'est pas pour rien qu'elles existent!

  6. #6
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Par défaut
    php implémente le copy on write. Même lors de passages par copy (le comportement par défaut pour les POD et les array), php utilise du ref counting et ne "sépare" les variables que lorsqu'il y en a vraiment besoins.
    Euh, j'ai pas tout compris

    J'ai demandé plus de détails sinon, et il semblerait qu'en effet les "bugs"/soucis qui ont été rencontrés l'ont été avec une version bien antérieure de PHP

    Merci de vos réponses !

Discussions similaires

  1. utilisation des références
    Par drKzs dans le forum C++
    Réponses: 7
    Dernier message: 25/07/2013, 16h10
  2. Réponses: 1
    Dernier message: 15/07/2011, 08h06
  3. Utilisation des références
    Par J_Lennon dans le forum Général Java
    Réponses: 3
    Dernier message: 29/03/2008, 15h36
  4. Réponses: 4
    Dernier message: 08/06/2006, 23h04
  5. Utilisation des références pour les tableaux
    Par Bouboubou dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 4
    Dernier message: 14/12/2005, 13h47

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