Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1703 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2314617
MaybeEijOr​Not
but someone at least
Posté le 28-04-2018 à 14:44:39  profilanswer
 

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.
mood
Publicité
Posté le 28-04-2018 à 14:44:39  profilanswer
 

n°2314629
pluj
Posté le 28-04-2018 à 17:12:48  profilanswer
 

Lu,
 
la syntaxe est :

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


Message édité par pluj le 28-04-2018 à 17:14:22
n°2314631
MaybeEijOr​Not
but someone at least
Posté le 28-04-2018 à 17:25:56  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
procédure ou fonctionEditer une fonction en VBA.
Utilisation d'une selection en VBARecherche de cellule en fonction d'un texte donné.
[Résolu PHP]aide pour passer de preg_replace à preg_replace_callbackMéthode pour placer tous les mots du dictionnaire dans une phrase.
Utilisation des signets en VBAppeler methode surchargée sans virtual
probleme en programmation c "chaine de caracteres dans une fonction[Matlab/Octave] Fonction x_n = f(x_(n-1))
Plus de sujets relatifs à : Utilisation d'une méthode de class en tant que fonction de callback


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR