Als ich mir UCenter ansah, gab es eine Funktion call_user_func, die ich nicht herausfinden konnte, weil ich dachte, es sei eine von mir definierte Funktion, aber ich konnte sie nach der Suche nirgends finden Auf Baidu habe ich herausgefunden, dass call_user_func eine Eingebaute Funktion
Die Funktion call_user_func ähnelt einer speziellen Methode zum Aufrufen einer Funktion. Die Verwendungsmethode ist wie folgt:
function a($b,$c) { echo $b; echo $c; } call_user_func('a', "111","222"); call_user_func('a', "333","444"); //显示 111 222 333 444
Es ist seltsam, eine Methode innerhalb einer Klasse aufzurufen. Ich weiß nicht, was die Entwickler darüber nachgedacht haben, was auch voller Neuheiten ist.
class a { function b($c) { echo $c; } } call_user_func(array("a", "b"),"111"); //显示 111
Die Funktion call_user_func_array ist call_user_func sehr ähnlich, jedoch auf andere Weise. Die Parameter werden übergeben, um die Parameterstruktur klarer zu machen:
function a($b, $c) { echo $b; echo $c; } call_user_func_array('a', array("111", "222")); //显示 111 222
Die Funktion call_user_func_array kann auch aufrufen Methoden innerhalb der Klasse.
Class ClassA { function bc($b, $c) { $bc = $b + $c; echo $bc; } } call_user_func_array(array('ClassA','bc'), array("111", "222")); //显示 333
Sowohl die Funktion call_user_func als auch die Funktion call_user_func_array unterstützen , wodurch sie funktional konsistenter mit gewöhnlichen Funktionsaufrufen sind:
function a(&$b) { $b++; } $c = 0; call_user_func('a', &$c); echo $c;//显示 1 call_user_func_array('a', array(&$c)); echo $c;//显示 2
<?php function foobar($arg, $arg2) { echo FUNCTION, " got $arg and $arg2\n"; } class foo { function bar($arg, $arg2) { echo METHOD, " got $arg and $arg2\n"; } } // Call the foobar() function with 2 arguments call_user_func_array("foobar", array("one", "two")); // Call the $foo->bar() method with 2 arguments $foo = new foo; call_user_func_array(array($foo, "bar"), array("three", "four")); ?>
foobar bekam eins und zwei
foo::bar bekam drei und vier
Beispiel #2 call_user_func_array() unter Verwendung des Namespace-Namens
<?php namespace Foobar; class Foo { static public function test($name) { print "Hello {$name}!\n"; } } // As of PHP 5.3.0 call_user_func_array(NAMESPACE .'\Foo::test', array('Hannes')); // As of PHP 5.3.0 call_user_func_array(array(NAMESPACE .'\Foo', 'test'), array('Philip')); ?>
Hallo Hannes!
Hallo Philip!
Beispiel #3 Verwendung der Lambda-Funktion
<?php $func = function($arg1, $arg2) { return $arg1 * $arg2; }; var_dump(call_user_func_array($func, array(2, 4))); /* As of PHP 5.3.0 */ ?>
int(8)
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Anwendungsbeispiele der PHP-Funktionen call_user_func und call_user_func_array. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!