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

时间:2008-10-23 20:19:49

标签: php oop dom callback function-calls

我想使用php simple HTML DOM parser从一篇文章的页面上的每篇文章中获取图片,标题,日期和说明。在查看API时,我注意到它有一个set_callback,它设置了一个回调函数。但是,我不知道这是做什么或如何使用它?在其中一个例子中,它用来调用一个删除一些东西的函数,我想知道你是否必须使用它来调用所有函数?

我想我想知道为什么我会使用它,以及它做了什么,因为我之前从未遇到过回调函数!

5 个答案:

答案 0 :(得分:23)

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

<?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(),然后调用传入的函数。

答案 1 :(得分:3)

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

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

$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()”。同样,我不确定这个特定的库是如何工作的(即回调函数将被调用的方法)

答案 2 :(得分:2)

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

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

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

请参阅is_callable的手册条目。

您可以使用相当详细的函数call_user_func来调用回调。

答案 3 :(得分:0)

<强>认定中

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

示例

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中有一些默认函数接受回调函数的名称作为参数中的字符串,因为它避免了常量名称和函数名称之间的冲突。所以不要在这些事情上感到困惑。

答案 4 :(得分:0)

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

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

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

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