Précédent   Forum du club des développeurs et IT Pro > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/12/2012, 14h15   #1
Difré91
Membre du Club
 
Inscription : mai 2007
Messages : 153
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 153
Points : 52
Points : 52
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 :
Citation:
Durée : 5.0067901611328E-6 secondes
quand la création du premier tableau prenait :
Citation:
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 ?
Difré91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2012, 14h25   #2
grunk
Modérateur
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 2 497
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 28
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 2 497
Points : 5 209
Points : 5 209
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 | Recherche CDI dev. Web sur Dijon et alentours.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 26/12/2012, 14h35   #3
Difré91
Membre du Club
 
Inscription : mai 2007
Messages : 153
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 153
Points : 52
Points : 52
Merci grunk,

je vais lire cet article en détail.
Difré91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h25.


 
 
 
 
Partenaires

Hébergement Web