web-dev-qa-db-fra.com

Comment utiliser $ this en fermeture en php

J'ai une fonction comme celle-ci:

class Service {
    function delete_user($username) {   
        ...
        $sessions = $this->config->sessions;
        $this->config->sessions = array_filter($sessions, function($session) use ($this){
            return $this->get_username($session->token) != $username;
        });
    }
}

mais cela ne fonctionne pas car vous ne pouvez pas utiliser $this inside use, est-il possible d'exécuter une fonction membre de la classe Service à l'intérieur d'un callback? Ou dois-je utiliser pour ou pour chaque boucle?

14
jcubic

$this est toujours disponible dans les fermetures (non statiques) depuis PHP 5.4, pas besoin de use it.

class Service {
    function delete_user($username) {   
        ...
        $sessions = $this->config->sessions;
        $this->config->sessions = array_filter($sessions, function($session) {
            return $this->get_username($session->token) != $username;
        });
    }
}

Voir Manuel PHP - Fonctions anonymes - Liaison automatique de $ this

21
ShiraNai7

Vous pouvez simplement le convertir en autre chose:

$a = $this;
$this->config->sessions = array_filter($sessions, function($session) use ($a, $username){
   return $a->get_username($session->token) != $username;
});

Vous devrez également passer $username à travers sinon ce sera toujours vrai.

0
sjdaws