Wie man Klassenmethoden in aufrufbaren array_maps implementiert [duplicate]
Lesezeit: 3 Minuten
Justin
Ich versuche, eine Klasse zu erstellen, um Arrays zu behandeln, aber ich kann es anscheinend nicht bekommen array_map() darin zu arbeiten.
$array = [1,2,3,4,5,6,7,8,9,10];
class test {
public $values;
public function adding($data) {
$this->values = array_map($this->dash(), $data);
}
public function dash($item) {
return '-' . $item . '-';
}
}
var_dump($array);
$test = new test();
$test->adding($array);
// Expected: -1-,-2-,-3-,-4-...
var_dump($test->values);
Warning: Missing argument 1 for test::dash(), called in [...]\arraytesting.php on line 11 and defined in [...]\arraytesting.php on line 15
Warning: array_map() expects parameter 1 to be a valid callback, function '--' not found or invalid function name in [...]\arraytesting.php on line 11 NULL
Was mache ich falsch oder funktioniert diese Funktion innerhalb von Klassen einfach nicht?
Jon
Sie spezifizieren dash als Rückruf in die falsche Richtung.
Lesen Sie mehr über die verschiedenen Formen eines Rückrufs hier.
Danke für die schnelle Wiederholung. Ich habe es funktioniert und danke für deine Hilfe. Ich habe mich nur gefragt, ob Sie zufällig mehr Artikel über Rückrufe haben und wie Sie angeben, ob dies korrekt ist?
– Justin
24. März 2011 um 16:49 Uhr
@Justin: Schau mal hier: stackoverflow.com/questions/48947/…
– Jon
24. März 2011 um 19:01 Uhr
funktioniert sogar statisch wie array_map( @[ self, ‘dash’ ] )
– Bortunac
25. Juni 2016 um 22:53 Uhr
Wie können Sie einen Parameter mit der Dash-Funktion übergeben?
– Nielsapp
10. Mai 2018 um 11:33 Uhr
@Nielsapp Sie können nicht direkt, Sie müssen eine aufrufbare übergeben, die die gewünschten Argumente effektiv bindet, z array_map(function($item) { return $this->dash($item, 'additional argument'); }, $data)
– Jon
14. Mai 2018 um 9:49 Uhr
Bei Verwendung einer Klassenmethode als Callback für Funktionen wie array_map() und usort(), müssen Sie den Callback als zweiwertiges Array senden. Der 2. Wert ist immer der Name der Methode als String. Der 1. Wert ist der Kontext (Klassenname oder Objekt)
array_map($this->dash(), $data) Anrufe $this->dash() mit 0 Argumenten und verwendet den Rückgabewert als Callback-Funktion, die auf jedes Mitglied des Arrays angewendet wird. Sie wollen array_map(array($this,'dash'), $data) stattdessen.
Das array-Ding ist das PHP-Callback für eine Objektinstanzmethode. Rückrufe zu regulären Funktionen werden als einfache Zeichenfolgen definiert, die den Funktionsnamen enthalten ('functionName'), während statische Methodenaufrufe definiert sind als array('ClassName, 'methodName') oder als String so: 'ClassName::methodName' (funktioniert ab PHP 5.2.3).
array_map nimmt ein zurückrufen als erster Parameter.
Und ein Rückruf zu einer statischen Methode wird wie folgt geschrieben:
array('classname', 'methodname')
Das bedeutet, dass Sie in Ihrem speziellen Fall Folgendes verwenden würden:
Falls die Klasse zu einem anderen Namensraum gehört, müssen Sie den vollständigen Klassennamen des Namensraums verwenden. Unten ist ein Beispiel mit einer CakePHP Utility-Klasse: