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
Réponses
Trop de publicités?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.
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
?>