web-dev-qa-db-fra.com

Une méthode peut-elle être utilisée en tant que fonction array_map

Je veux faire quelque chose comme ça:

 classe Cls {
 fonction fun ($ php) {
 return 'La pluie en Espagne.'; 
} 
} 
 
 $ ar = array (1,2,3); 
 $ instance = new Cls (); 
 print_r (array_map ('$ instance-> fun', $ ar )); 
 // ^ cela ne fonctionnera pas 

mais le premier argument de array_map est censé être le nom de la fonction. Je veux éviter d'écrire une fonction wrapper autour de $ instance-> fun, mais il ne semble pas que ce soit possible. Est-ce vrai?

59
allyourcode

Oui, vous pouvez avoir des rappels de méthodes, comme ceci:

array_map(array($instance, 'fun'), $ar)

voir le type de rappel dans le manuel de PHP pour plus d'informations

129
Jani Hartikainen

Vous pouvez aussi utiliser

array_map('Class::method', $array) 

syntaxe.

30
Metronom

En fait, vous devez connaître la définition de rappel, veuillez vous référer au code suivant:

<?php 

// An example callback function
function my_callback_function() {
    echo 'hello world!';
}

// An example callback method
class MyClass {
    static function myCallbackMethod() {
        echo 'Hello World!';
    }
}

$myArray = [1, 2, 3, 4];

// Type 1: Simple callback
array_map('my_callback_function', $myArray); 

// Type 2: Static class method call
array_map(array('MyClass', 'myCallbackMethod'), $myArray); 

// Type 3: Object method call
$obj = new MyClass();
array_map(array($obj, 'myCallbackMethod'), $myArray);

// Type 4: Static class method call (As of PHP 5.2.3)
array_map('MyClass::myCallbackMethod', $myArray);

// Type 5: Relative static class method call (As of PHP 5.3.0)
class A {
    public static function who() {
        echo "A\n";
    }
}

class B extends A {
    public static function who() {
        echo "B\n";
    }
}

array_map(array('B', 'parent::who'), $myArray); // A
?>

De: http://php.net/manual/en/language.types.callable.php

8
lijinma