Utilisation d'une méthode de class en tant que fonction de callback

Utilisation d'une méthode de class en tant que fonction de callback - PHP - Programmation

Marsh Posté le 28-04-2018 à 14:44:39    

Bonjour,

 

Savez-vous comment réaliser un appel à une méthode de class lors de l'utilisation d'une fonction callback ?

 
Code :
  1. protected function getFileName($val) {
  2.      return preg_replace(array('/^\.+/', '/\.php$/'), array(false, ''), $val);
  3.   }
  4.  
  5.   protected function getLanguages() {
  6.      $arr = scandir('languages/');
  7.      return array_values(array_filter(array_map($this->getFileName(), $arr)));
  8.   }
 

Cela me retourne que je ne passe pas le nombre suffisant d'arguments à ma méthode car aucun argument n'est envoyé.
Évidemment si j'utilise : $this->getFileName alors cela essaye d’accéder à une propriété qui n'existe pas.

 

J'ai trouvé la solution d'utiliser l'opérateur de double 2 points :

Code :
  1. protected function getFileName($val) {
  2.      return preg_replace(array('/^\.+/', '/\.php$/'), array(false, ''), $val);
  3.   }
  4.  
  5.   protected function getLanguages() {
  6.      $arr = scandir('languages/');
  7.      return array_values(array_filter(array_map('self::getFileName', $arr)));
  8.   }


Mais ce n'est pas logique d'y accéder en static.

 

Sinon j'ai aussi l'utilisation d'une fonction anonyme :

Code :
  1. protected function getFileName($val) {
  2.      return preg_replace(array('/^\.+/', '/\.php$/'), array(false, ''), $val);
  3.   }
  4.  
  5.   protected function getLanguages() {
  6.      $arr = scandir('languages/');
  7.      return array_values(array_filter(array_map(function($var) { return $this->getFileName($var); }, $arr)));
  8.   }
 

N'y a t-il pas un meilleur moyen de faire ?
Bon c'est plus pour ma culture car au final je vais faire un truc bien dégueux en une fois (mais bon on reste sur l'utilisation d'une fonction anonyme) :

Code :
  1. protected function getLanguages() {
  2.      $arr = scandir('languages/');
  3.      return array_values(array_filter(array_map(function($val) { return preg_replace(array('/^\.+/', '/\.php$/'), array(false, ''), $val); }, $arr)));
  4.   }


Message édité par MaybeEijOrNot le 28-04-2018 à 14:45:50

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 28-04-2018 à 14:44:39   

Reply

Marsh Posté le 28-04-2018 à 17:12:48    

Lu,
 
la syntaxe est :

Code :
  1. array_map([$this, 'getFileName'], $arr)


Message édité par pluj le 28-04-2018 à 17:14:22
Reply

Marsh Posté le 28-04-2018 à 17:25:56    

Merci ça fonctionne, j'avais pourtant testé des choses dans le genre sans réussite. :pt1cable:  
Je vais quand même repassé sur l'utilisation de la méthode, plutôt que tout mettre sur une ligne car là c'est particulièrement illisible. :D


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed