Kann eine Methode als array_map-Funktion verwendet werden?

73

Ich möchte so etwas machen:

Klasse Cls {
  Funktionsspaß ($ php) {
    Rückkehr 'Der Regen in Spanien.';
  }}
}}

$ ar = Array (1,2,3);
$ instance = new Cls ();
print_r (array_map ('$ instance-> fun', $ ar));
               // ^ das wird nicht funktionieren

Das erste Argument für array_map soll jedoch der Name der Funktion sein. Ich möchte vermeiden, eine Wrapper-Funktion um $ instance-> fun zu schreiben, aber es scheint nicht möglich zu sein. Ist das wahr?

allyourcode
quelle

Antworten:

160

Ja, Sie können Rückrufe auf Methoden wie diese haben:

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

Weitere Informationen finden Sie im Rückruftyp im PHP-Handbuch

Jani Hartikainen
quelle
1
Ordentlich. Wusste nicht, dass das machbar ist. +1
Paolo Bergantino
28
Wenn die Methode ein statisches Array ist ('Class', 'StaticMethod'), funktioniert das auch
Philippe Gerber
2
Dies ist sooo nützlich (und nicht auf der array_map-Seite von php.net dokumentiert. Danke :)
Candidasa
1
Was ist, wenn es eine abstrakte Klasse ist? welches die Funktion hat, aufgerufen zu werden.
Amitchhajer
3
@amitchhajer Wenn es sich um eine statische Funktion handelt, können Sie sie array('Class_Name', 'functionName')als Parameter verwenden. Wenn es sich um die übergeordnete Klasse der aktuellen Klasse handelt, array($this, 'functionName')sollte die Verwendung höchstwahrscheinlich funktionieren.
Jani Hartikainen
34

Sie können auch verwenden

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

Syntax.

Metronom
quelle
10
Dies funktioniert auch für die Variationarray_map('self::method', $array)
alanng
8

Eigentlich müssen Sie die Definition von Rückruf kennen, bitte beachten Sie den folgenden Code:

<?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
?>

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

Lijinma
quelle