call-time pass by reference etc...

Eléphant du PHP | 94 Messages

20 févr. 2011, 16:12

Bonjour,

Toujours dans la découverte des messages pas graves, j'ai ce message qui revient systématiquement lorsque je fais appel à une fonction en passant en argument, une référence à un tableau.

Le message exact :
Deprecated: Call-time pass-by-reference has been deprecated in /var/www/version2/saisie_paye1.php on line 152

Un exemple de l'appel (j'en ai un stock qui déclenche ce message)

ecr_f_tempo ($nom_fich, &$tab_net, 2); //ecriture du net dans le fichier temporaire
J'imagine qu'il s'agit de &tab_net qui est un tableau, dont je veux passer la référence, pour qu'il soit directement modifié dans la fonction ecr_f_tempo.

Par contre au niveau de l'anglais, je ne suis pas très performant, c'est le moins que l'on puisse dire.
Le terme Call-time me laisse de marbre quoi.

Ça signifie quoi tout ça ?

Et comment éviter ce message ? (hormis en baissant le niveau d'affichage des messages).

Merci pour l'aide

Michel

ViPHP
xTG
ViPHP | 7331 Messages

20 févr. 2011, 16:48

Avec PHP 5(ou une certaine version de la 4 je ne sais plus) il n'est plus nécessaire de passer des tableaux et des objets par référence.
Enlèves donc le &. ;)

Eléphant du PHP | 94 Messages

20 févr. 2011, 17:17

Euh, oui, mais c'est voulu.
Je veux dire par là, que je ne vois pas l'utilité de faire une copie d'un tableau qui peut-être relativement important, dans une fonction qui en créera un deuxième, pour me le renvoyer pour que je le recopie dans le premier tableau.
Beaucoup de ressources et plus de boulot.

Ce n'est plus possible de passer une adresse de tableau ?

ViPHP
xTG
ViPHP | 7331 Messages

20 févr. 2011, 17:44

En fait je me suis mal exprimé (ou plutôt je n'ai pas tout dit).
C'est à définir dans le prototype de la fonction mais par la suite tu n'as rien à préciser lors de son utilisation.
Exemple :
<?php
function tri(&$tab) // définition de la fonction : passage par référence
{
  sort($tab);
}

$tab = array(0 => 'B', 1 => 'Z', 2 => 'A');
print_r($tab);
echo"<br />";
tri($tab); // utilisation de la fonction sans rien préciser
print_r($tab);
?>
Array ( [0] => B [1] => Z [2] => A )
Array ( [0] => A [1] => B [2] => Z )

Eléphant du PHP | 94 Messages

20 févr. 2011, 18:43

Ah ok, il faut donc juste éviter la redondance.

Je vais voir ça.

Merci

EDIT : Ça marche, merci.
Modifié en dernier par Bosse.cie le 20 févr. 2011, 20:18, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 févr. 2011, 19:53

A verifier mais de memoire lenpassage d'objet ce fait par defaut par reference, si tu veux une copie il faut utiliser la fonction clone.

@+
Il en faut peu pour être heureux ......

ViPHP
xTG
ViPHP | 7331 Messages

20 févr. 2011, 21:31

Ouep, les objets sont passés par référence automatiquement.