63 votes

Assigner la valeur de retour de new par référence est déprécié

Je viens d'avoir une erreur.

Quand j'essaie d'assigner un objet comme celui-ci :

$obj_md = new MDB2();

L'erreur que je reçois est "Assigning the return value of new by reference is deprecated". En fait, j'ai cherché une solution mais la seule que j'ai vue est de désactiver la politique de php.ini (error_reporting). Je l'ai essayé aussi, mais ça n'a pas marché.

C'est tellement confus J'espère que vous pourrez m'aider. Merci d'avance.

0 votes

Vous êtes sûr que votre code n'est pas : $obj_md =& new MDB2(); Cela devrait en effet donner lieu à un avertissement.

0 votes

Oui, je le suis. En fait, le studio Zend me dit qu'il y a cet avertissement.

0 votes

J'ai eu le même avertissement de la part de Zend mais il a été causé par une autre libaray que j'ai utilisée (xajax). Jetez un oeil au stacktrace et vous trouverez peut-être d'où vient cette erreur. Quoi qu'il en soit, suivez simplement Réponse de Johns pour le réparer avec une simple recherche et remplacement.

96voto

Paul Dixon Points 122033

En PHP5, cet idiome est obsolète.

$obj_md =& new MDB2();

Vous êtes sûr de ne pas avoir oublié une esperluette dans votre exemple de code ? Cela générerait l'avertissement que vous mentionnez, mais il n'est pas nécessaire et peut être supprimé.

Pour voir pourquoi cet idiome a été utilisé en PHP4, voir cette page du manuel (notez que PHP4 est mort depuis longtemps et que ce lien renvoie à une version archivée de la page concernée)

4 votes

Non, je n'ai pas cette esperluette. :(

0 votes

Merci, les parties php4 du manuel ont été réorganisées, j'ai corrigé le lien.

8 votes

Il semble également que le code source de MDB2 lui-même utilise cette méthode d'affectation dépréciée ; plusieurs personnes (dont moi-même) obtiennent le message d'avertissement "déprécié" susmentionné en PHP 5.3 à chaque fois qu'un objet MDB2 est créé. Il semble que l'équipe de MDB2 ait créé un bogue à ce sujet : pear.php.net/bugs/bug.php?id=16508

28voto

John Crockford Points 161

J'ai récemment déplacé un site utilisant SimplePie ( http://simplepie.org/ ) d'un serveur qui utilisait PHP 5.2.17 à un serveur qui utilise PHP 5.3.2. C'est après cette migration que j'ai commencé à recevoir une liste de messages d'erreur tels que celui-ci :

Déprécié : Assigner la valeur de retour de new par référence est déprécié dans .../php/simplepie.inc on line 738

Après avoir examiné plusieurs discussions sur ce problème, j'ai clarifié les choses en remplaçant toutes les instances de \=& nouveau con \= nouveau dans le fichier simplepie.inc.

Je ne suis pas assez expérimenté pour savoir si cela fonctionnera dans tous les cas où ces messages d'erreur sont reçus, mais cela a fonctionné dans ce cas particulier et cela peut valoir la peine d'essayer.

9voto

Nitin Points 81

Peut-être que le constructeur de MDB2 contient un code qui utilise une $variable =& new ClassName() ;

8voto

Chris Burgess Points 1634

Nitin a raison - le problème se situe en fait dans le code MDB2.

Según Remplacement de PEAR : MDB2 sur PHP 5.3 vous pouvez mettre à jour la version SVN de MDB2 pour obtenir une version compatible avec PHP5.3.

Comme cette réponse a été donnée en mars 2010, et http://pear.php.net/package/MDB2/ montre une version quelques mois plus tard, je pense que la version actuelle de MDB2 résoudra également le problème.

7voto

Jeshurun Points 7257

& est utilisé en PHP pour passer un objet à une méthode / assigner un nouvel objet à une variable par référence. Il est déprécié en PHP 5 car PHP 5 passe tous les objets par référence par défaut.

25 votes

"PHP 5 passe toutes les variables par référence par défaut." Ceci est pas vrai . PHP5 passe tous les objets par référence, mais les autres variables sont par défaut par valeur. Explication de Fuller

1 votes

Exactement ce que @artfullrobot a dit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X