72 votes

Appel-temps passés par référence a été désapprouvée ;

Je reçois l’avertissement : appel-temps passés par référence a été déconseillée pour les lignes de code suivantes. S’il vous plaît quelqu'un aider

144voto

StasM Points 6232

Retirez & de &$this partout, il n'est pas nécessaire. En fait, je pense que vous pouvez supprimer & partout dans ce code il n'est pas nécessaire à tous.

Une longue explication

PHP permet de passer des variables de deux façons: "par valeur" et "par référence". Première façon, vous pouvez les modifier, d'autre moyen que vous ne pouvez pas:

     function not_modified($x) { $x = $x+1; }
     function modified(&$x) { $x = $x+1; }

Remarque l' & signe. Si je l'appelle, modified sur une variable, il sera modifié, si je l'appelle, not_modified, après elle renvoie la valeur de l'argument sera le même.

Ancienne version de PHP a permis de simuler le comportement d' modified avec not_modified par faire ceci: not_modified(&$x). C'est "l'appel par référence". Il est obsolète et ne devrait jamais être utilisé.

En outre, dans de très anciennes versions de PHP (lire: PHP 4 et avant), si vous modifiez des objets, vous devez passer par référence, donc l'utilisation d' &$this. Ce n'est ni nécessaire ni recommandé de plus, en tant qu'objet sont toujours modifié lorsqu'il est passé à la fonction, c'est à dire cela fonctionne:

   function obj_modified($obj) { $obj->x = $obj->x+1; }

Ce serait de modifier $obj->x , même si elle est formellement adopté "par la valeur", mais ce qui est passé est l'objet de la poignée (comme en Java, etc.) et non pas la copie de l'objet, comme il était en PHP 4.

Cela signifie que, sauf si vous faites quelque chose de bizarre, vous avez presque jamais besoin de passer de l'objet (et donc de $this par référence, que ce soit du temps d'appel ou autre). En particulier, votre code n'a pas besoin d'elle.

20voto

PhpMyCoder Points 6719

Juste au cas où vous vous poseriez la question, un temps d'appel passage par référence est obsolète PHP fonctionnalité qui favorise PHP dactylographie. Fondamentalement, il vous permet de passer d'une référence (un peu comme un C pointeur) à une fonction qui n'a pas expressément fait la demande. C'est PHP solution à la cheville carrée dans un trou rond problème.
Dans votre cas, jamais de référence $this. En dehors de la classe, en référence à son $this ne vous permettra pas d'accéder à il est privé de méthodes et de champs.

Exemple:

<?php
function test1( $test ) {} //This function doesn't want a reference
function test2( &$test ) {} //This function implicitly asks for a reference

$foo = 'bar';
test2( $foo ); //This function is actually given a reference
test1( &$foo ); //But we can't force a reference on test1 anymore, ERROR
?>

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