web-dev-qa-db-fra.com

L'affectation de la valeur de retour de new by reference est obsolète

Je viens d'avoir une erreur.

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

$obj_md = new MDB2();

L'erreur que j'obtiens est "L'attribution de la valeur de retour de new par référence est obsolète". En fait, je cherchais une solution, mais la seule que j'ai vue est simplement de refuser la politique de php.ini (error_reporting). Je l'ai essayé aussi, mais cela n'a pas fonctionné. 

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

61
José M. Gilgado

En PHP5, cet idiome est obsolète

$obj_md =& new MDB2();

Vous êtes sûr que vous n'avez pas oublié une esperluette dans votre exemple de code? Cela générerait l’avertissement que vous déclarez, mais il n’est pas requis et peut être supprimé.

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

93
Paul Dixon

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

Obsolète: l'attribution de la valeur de retour de new par référence est obsolète dans .../php/simplepie.inc à la ligne 738

Après avoir examiné plusieurs discussions sur ce problème, j’ai clarifié les choses en remplaçant toutes les instances de = & new par = new 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 fonctionne dans ce cas particulier et cela peut valoir la peine d'essayer.

27
John Crockford

Peut-être que le constructeur de MDB2 a du code utilisant une variable $ = = new ClassName ();

9
Nitin

La nitine est correcte - le problème est en réalité dans le code MDB2.

Selon Remplacement de PEAR: MDB2 sur PHP 5.3 , vous pouvez mettre à jour la version SVN de MDB2 pour une version compatible PHP 5.3.

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

8
Chris Burgess

& est utilisé dans PHP pour passer un objet à une méthode/assigner un nouvel objet à une variable par référence. Il est obsolète dans PHP 5 car PHP 5 transmet toutes les variables par référence par défaut.

7
Jeshurun

J'ai eu le même problème. J'avais déjà le '&' et pourtant, le même avertissement était émis… .. J'utilise PHP 5.3 avec WAMP et tout ce que j'ai fait était REMOVE '&' et l'avertissement avait disparu.

$obj= new stdClass();  //Without '&' sign.
6
Vishnu Narang

il suffit de supprimer new dans la $obj_md =& new MDB2();

1
Never Say Die

Mettez à niveau votre pear/MDB2 à partir de la console:

# pear upgrade MDB2-beta
# pear upgrade MDB2_Driver_Mysql-beta

Problème résolu à la version 2.5.0b3

0
Serhii Koval

C'est arrivé à cause de PHP 5.3, qui vient dans le paquet WAMP 2.0i et non de Joomla.

Vous avez deux choix pour le réparer,

soit utiliser WAMP 2h (version précédente) ou télécharger PHP 5.2.9-2 addon depuis le site Web de WAMP.

0
Shailesh Patel