Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre du Club
    Inscrit en
    mai 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : mai 2007
    Messages : 158
    Points : 53
    Points
    53

    Par défaut Passage par référence caché

    Bonjour à tous,

    En faisant un benchmark perso pour tester les performances entre un passage par copie et un passage par référence en PHP, je me suis trouvé face à une bizarrerie intéressante.

    Ma configuration actuelle est :

    Code :
    1
    2
    PHP Version	5.3.9-ZS5.6.0
    Zend Framework Version	 1.11.11
    J'ai fais un premier test de cette forme :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $tab1 = array_fill(0, 1000000, 'e');
     
    $time_start = microtime(true);
    $tab2 = $tab1;
    $time_end = microtime(true);
     
    $time = $time_end - $time_start;
     
    echo 'Durée : '.$time.' secondes<br/>';
    Et à ma grande surprise, j'ai obtenu :
    Durée : 5.0067901611328E-6 secondes
    quand la création du premier tableau prenait :
    Durée : 0.14926791191101 secondes
    C'était comme si par défaut $tab2 était une référence de $tab1.
    Alors j'ai décidé de modifier $tab1 et de regarder $tab2 pour voir si il était modifié également.

    Code :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $tab1 = array_fill(0, 1000000, 'e');
     
    $time_start = microtime(true);
     
    $tab2 = $tab1;
    $tab1[14] = 'j';
     
    $time_end = microtime(true);
    $time = $time_end - $time_start;
    echo 'Durée : '.$time.' secondes<br/>';
    echo $tab2[14];
    Et là, résultat :
    Code :
    1
    2
    3
     
    Durée : 0.093044996261597 secondes
    e
    En commentant la ligne $tab1[14] = 'j';, je reviens à :
    Code :
    Durée : 2.1457672119141E-6 secondes
    C'est une optimisation cachée, que je trouve intéressante. J'aimerais savoir si c'est un mécanisme connu, défini par le langage, ou un mécanisme lié au moteur PHP de Zend ?

    Si je comprend bien, une affection d'un tableau est faite par référence tant que les deux tableaux restent constants ?

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro Olivier
    Dév. Web / Android
    Inscrit en
    août 2003
    Messages
    3 073
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier
    Âge : 30
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Dév. Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 3 073
    Points : 6 871
    Points
    6 871

    Par défaut

    Tant que 2 variables font référence à la même chose , PHP ne créer effectivement pas de copie du contenu.

    Tu peux avoir le détail de tout celà sur le très bon article de Julien Pauli : Maîtrise de la gestion des variables en PHP
    Pry Framework php5

  3. #3
    Membre du Club
    Inscrit en
    mai 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : mai 2007
    Messages : 158
    Points : 53
    Points
    53

    Par défaut

    Merci grunk,

    je vais lire cet article en détail.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •