什么是回调函数以及如何将其与 OOP 一起使用

What is a callback function and how do I use it with OOP

提问人:Paul M 提问时间:10/24/2008 更新时间:1/7/2022 访问量:27494

问:

我想使用 php 简单的 HTML DOM 解析器从充满文章的页面上的每篇文章中获取图像、标题、日期和描述。在查看 API 时,我注意到它有一个设置回调函数的set_callback。但是,我不确定这是做什么的,或者我将如何使用它?在其中一个示例中,它用于调用一个剥离一些东西的函数,我想知道您是否必须使用它来调用所有函数?

我想我想知道我为什么要使用它,它有什么作用,因为我以前从未遇到过回调函数!

php oop dom 回调 函数调用

评论


答:

26赞 Mark Biek 10/24/2008 #1

下面是一个基本的回调函数示例:

<?php

function thisFuncTakesACallback($callbackFunc)
{
    echo "I'm going to call $callbackFunc!<br />";
    $callbackFunc();
}

function thisFuncGetsCalled()
{
    echo "I'm a callback function!<br />";
}

thisFuncTakesACallback( 'thisFuncGetsCalled' );
?>

您可以调用一个函数,该函数的名称存储在变量中,如下所示:$variable()。

因此,在上面的示例中,我们将 thisFuncGetsCalled 函数的名称传递给 thisFuncTakesACallback(),然后调用传入的函数。

评论

0赞 Tim Visée 3/9/2014
伟大而简单的答案,谢谢。不过我有一个问题,具有此功能的最低要求PHP版本是多少?
4赞 Sophia_ES 11/25/2015
这个答案已经过时了。今天,PHP 使用术语“回调”来指代特定类型的函数。有关更多信息,请阅读 PHP 自己的文档:php.net/manual/en/function.call-user-func.php
3赞 Owen 10/24/2008 #2

回调函数将对特定方法返回的任何数据使用该函数。

我不确定这个特定的库是如何工作的,但它可以像下面这样简单:

$html = file_get_html('http://example.com');
$html->set_callback('make_bold');
$html->find('#title'); // returns an array

function make_bold($results) {
// make the first result bold
  return '<b>'.$results[0].'</b>';
}

即,函数 “” 将对找到的任何数据运行。同样,我不确定这个特定库是如何工作的(即,回调函数将被调用哪些方法)make_bold()

3赞 troelskn 10/24/2008 #3

回调可以是函数、对象实例的方法或类上的静态方法。无论哪种方式,它都是一种函数指针。在某些语言中,函数是一种特定类型。因此,您可以将函数分配给变量。这些通常称为面向函数的语言。一个很好的例子是 Javascript。

在 PHP 中,回调可以是以下任何一个:

$fn = 'foo'; // => foo()
$fn = array($obj, 'foo'); // => $obj->foo()
$fn = array('Foo', 'bar'); // => Foo::bar()

有关is_callable,请参阅手册条目。

您可以使用相当冗长的函数 call_user_func 调用回调。

2赞 2 revsuser7987783 #4

定义

回调/可调用对象是一个简单的函数(无论是匿名函数还是命名函数),我们将其作为函数参数传递给另一个函数,该函数在结果中返回传递的函数。

function iWillReturnCallback($callBackHere){
    return $callBackHere;
}

function iAmCallBack(){
    echo "I am returned with the help of another function";
}

iWillReturnCallback(iAmCallBack());

//--Output -> I am returned with the help of another function

不要混淆

php 中有一些默认函数接受回调函数的名称作为其参数中的字符串,以避免常量名称和函数名称之间的冲突。所以不要对这些事情感到困惑。

0赞 Deepak Bawa 11/14/2017 #5

使用 ,您现在可以执行以下操作:PHP 5.3

function doIt($callback) { $callback(); }

doIt(function() {
    // this will be done
});

最后,一个很好的方法。对 的一个很好的补充,因为回调很棒。PHP

评论

0赞 Spartacus 2/13/2018
如果不是函数会怎样?PHP 会抛出致命错误、警告还是什么都没有?$callback
0赞 MaXi32 1/7/2022 #6

目的是调用我们想要的函数,例如: 但是我们想使用另一个函数作为 or 为我们调用它:secretCode()helperservice

<?php
    
    // $call parameter can be anything
    function callBackServiceCenter($call)
    {
        echo "[callBackServiceCenter]: Hey, this is callBackServiceCenter function <br>We have received your command to call your requested function and we are now calling it for you! <br />";
        // Below is the part where it will call our secretCode()'s function
        $call();
        // And we can print other things after the secretCode()'s function has been executed:
        echo "[callBackServiceCenter]: Thank you for using our service at callBackServiceCenter. Have a nice day!<br />";
    }
    
    function secretCode()
    {
        echo "[secretCode]: Hey, this is secretCode function. Your secret code is 12345<br />";
    }
    
    callBackServiceCenter( 'secretCode' );
?>

输出:

[callBackServiceCenter]: Hey, this is callBackServiceCenter function
We have received your command to call your requested function and we are now calling it for you!
[secretCode]: Hey, this is secretCode function. Your secret code is 12345
[callBackServiceCenter]: Thank you for using our service at callBackServiceCenter. Have a nice day!