Heim  >  Artikel  >  Backend-Entwicklung  >  Wozu dient die PHP-Callback-Funktion?

Wozu dient die PHP-Callback-Funktion?

怪我咯
怪我咯Original
2017-06-19 11:19:465313Durchsuche

Es ist einfacher, es als Variable zu verstehen, z. B. $a=function(){echo "aaa";};$aa(); oder function a(){}; $b = „a“; $b(); Eine ist die anonyme Funktion, die als Variable aufgerufen werden soll, und die andere ist der Funktionsname, der als Variable aufgerufen werden soll von Callback-Funktion, einfach Diese Art des Funktionsaufrufs wird beispielsweise Callback-Funktion

Callback-Funktion Callback

genannt. Wir alle wissen, dass bei asynchronen Anforderungen häufig vorkommen Wenn bei der Verarbeitung in js normale Funktionen verwendet werden, kann nicht garantiert werden, dass sie nach Abschluss der asynchronen Anforderung aufgerufen werden. Es gibt also eine Rückruffunktion, insbesondere während der Dateiverarbeitung und der Ajax-Verarbeitung ist die Rückruffunktion sehr nützlich.
Funktion call_user_func()
mixed call_user_func ( callable $callback [, Mixed $parameter [, Mixed $… ]] )

return gibt einen zusammengesetzten Typwert zurück, der tatsächlich von der Callback-Funktion zurückgegeben wird Wert

aufrufbarer $callback Die Callback-Funktion kann ein Funktionsname, ein Array oder eine Zeichenfolge sein

gemischter $parameter Parameter der Funktion, nacheinander angezeigt

Das Folgende ist eine Einführung in die Verwendung von Demo
demo1: Rückruf-PHP-Funktionszeichenfolgenform

<?php
$data = array("name"=>"callback" , "value"=>"test");
$rs1 = http_build_query($data);      //直接调用php函数
$rs2  = call_user_func("http_build_query",$data); //使用回调函数
echo $rs1;  //name=callback&value=test
echo "<br />";
echo $rs2;  //name=callback&value=test
// 这里需要注意的是,参数1必须是可使用的函数可以通过function_exists()返回true的函数,这里提醒isset,empty,is_null 等认为的常用函数实际上是一个操作符.并不能算函数。

demo2 Rückruf-PHP-Funktion Funktionsname-Variablenform

<?php
//自定义函数
function myUrldecode($str){
    return urldecode($str);
}
$data = array("name"=>"callback" , "value"=>"天才");
$str  = http_build_query($data); 
$rs1  = urldecode($str);      //urlencode编码
$rs2  = call_user_func(myUrldecode,$str);
echo $rs1;  //name=callback&value=天才
echo "<br />";
echo $rs2;  //name=callback&value=天才
//这里我们可以看到,我们直接使用函数的名称也是可以的,不需要带引号字符串。
?>

demo3-Rückruf Klassenmethoden-Array-Format

<?php 
class MyClass{
    private $demo = "test";

    function myUrldecode($str){
        return urldecode($str);
    }
    static  function myUrlencode($str){
        return urlencode($str) ;
    }
}
$str = "?query=/test/demo1";

$encode  = call_user_func(array(MyClass,"myUrlencode"),$str);
//直接使用类的静态方法 将字符串进行url编码 不再是字符串或者函数名,而是一个数组格式,第一个项表示类名,第二个项则表示方法名。 第一项可以为类的引用地址,第二项为静态方法名称
$decode  = call_user_func(array("MyClass","myUrlencode"),$encode);
//同样是使用类的方法,不过调用的是普通方法名称。
echo $encode;  //%3Fquery%3D%2Ftest%2Fdemo1
echo "<br />"; //?query=/test/demo1
echo $decode;
//注意 使用方法名也具有作用域的概念,即private protected 和 public,通常回调类方法都只能调用publi 和默认作用域的 方法。
//同时如果是普通方法,并且内部使用了$this变量,那么进行调用是无法成功的.

?>

demo4 Callback-Klassenmethoden-String-Format

<?php
class MyClass{
    private $demo = "test";

    function myUrldecode($str){
        return urldecode($str);
    }

    private function myUrldecode2($str){
    return urldecode($str);
    }
    static  function myUrlencode($str){
        return urlencode($str) ;
    }
}

$str = "?query=/test/demo1";
  $encode  = call_user_func("MyClass::myUrlencode",$str);
  $decode  = call_user_func("MyClass::myUrldecode",$encode);
  echo $encode; //  %3Fquery%3D%2Ftest%2Fdemo1
  echo "<br />";
  echo $decode; //  ?query=/test/demo1
  $encode2  = call_user_func("MyClass::myUrlencode2",$str);
  var_dump($encode2);  // null
//如果直接使用字符串的方法的话,那么必须在类和方法名中添加::作为分割。
//这里我们发现不是静态方法也可以用::进行调用
//这里进行了一个测试,发现调用private 作用域的方法返回的是一个null值,说明确实存在作用域的关系
?>

demo5 Callback-Objektmethoden-Array-Format

<?php
class MyClass{
    private $demo = "test";


    function myUrldecode($str){
        return urldecode($str)  ."-" .$this->demo ; //调用内部的this作用域
    }
    static  function myUrlencode($str){
        return urlencode($str);
    }
}

 $str = "?query=/test/demo1";
 $class =  new MyClass();
 $encode  = call_user_func(array($class,"myUrlencode"),$str);
 $decode  = call_user_func(array($class,"myUrldecode"),$str);
 echo $encode; //%3Fquery%3D%2Ftest%2Fdemo1
 echo "<br />";
 echo $decode; //?query=/test/demo1-test
 //很明显,如果使用对象做为回调函数,内部的private 属性和方法也可以使用,但是对外的方法必须为默认或者 public类型
 //对象数组方式第一个选项必须为一个对象
?>

Manchmal stellen wir fest, dass das übergebene The Die Parameter sind möglicherweise nicht festgelegt, sodass die Verwendung von call_user_func () zu Problemen führen kann. Die meisten Verwendungsmethoden sind dieselben, die Verwendung von Parametern unterscheidet sich jedoch geringfügig >Funktion call_user_func_array()

demo1 Callback-PHP-Funktion mit variablen Parametern

<?php 
   $record1 = array(
            &#39;id&#39; => 2135,
    );
    $record2 = array(
        &#39;first_name&#39; => &#39;Sally&#39;,
    );
    $record3 = array(
        &#39;last_name&#39; => &#39;Jones&#39;,
    );
$return  = array_merge($record1,$record2,$record3);
//如果使用回调函数,则如下
$return  = call_user_func_array("array_merge", array($record1,$record2,$record3));
print_r($return); //Array ( [id] => 2135 [first_name] => Sally [last_name] => Jones )
//一些特别的函数允许你有不固定的参数,如果你还将它作为回调函数,则可以使用这个方法进行调用.
?>
tips1 So ermitteln Sie, ob es sich um eine Callback-Funktion handelt

bool is_callable ( callable $name [, bool $ syntax_only = false [, string &$callable_name ]] )

name

Die zu überprüfende Callback-Funktion.
syntax_only
Wenn diese Funktion auf TRUE gesetzt ist, überprüft sie nur, ob der Name eine Funktion oder Methode sein kann.
callable_name
Akzeptiert „callable name“.
Zurückgeben
Wenn der Name aufrufbar ist, geben Sie TRUE zurück, andernfalls FALSCH zurückgeben

<?php
// is_callable(); 
$bool = is_callable(urlencode);  // true
$bool = is_callable(urlencode,false);  // true
$bool = is_callable(urlencode,true);  // true
$bool = is_callable("urlencode",false,$callable_name1);
// string urlencode
$bool = is_callable("urldecode",true,$callable_name2); 
// string urldecode 即使不存在回调函数也会返回true
?>
Tipps2 Rufen Sie die Parameter der Funktion ab, ähnlich wie Argumente

in js

Das obige ist der detaillierte Inhalt vonWozu dient die PHP-Callback-Funktion?. 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