Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Anwendungsbeispiele der PHP-Funktionen call_user_func und call_user_func_array

Detaillierte Erläuterung der Anwendungsbeispiele der PHP-Funktionen call_user_func und call_user_func_array

伊谢尔伦
伊谢尔伦Original
2017-06-26 10:47:381982Durchsuche

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
Einfache Verwendung von call_user_func_array in PHP


<?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")); 
?>
Ausgabe der obigen Routine Ähnlich wie:

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 .&#39;\Foo::test&#39;, array(&#39;Hannes&#39;)); 
// As of PHP 5.3.0 
call_user_func_array(array(NAMESPACE .&#39;\Foo&#39;, &#39;test&#39;), array(&#39;Philip&#39;)); 
?>
Die Ausgabe der obigen Routine ist ähnlich wie:

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 */ 
?>
Die obige Routine gibt Folgendes aus:

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn