2008-10-23 54 views
11

我想使用php simple HTML DOM parser来从文章中的每篇文章中抓取图像,标题,日期和描述。在看API时,我注意到它有一个set_callback,它设置了一个回调函数。但我不知道这是做什么或我会如何使用它?在其中一个例子中,它用来调用一个函数去掉一些东西,我想知道你是否必须使用它来调用所有函数?什么是回调函数,以及如何与OOP一起使用

我想我想知道为什么我使用这个,它做什么,因为我从来没有遇到过回调函数!

回答

20

这里有一个基本的回调函数,例如:

<?php 

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

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

thisFuncTakesACallback('thisFuncGetsCalled'); 
?> 

您可以调用已存储在变量这样它的名字的函数:$变量()

所以,在上面的例子中,我们通过名thisFuncGetsCalled功能thisFuncTakesACallback()然后调用传递的功能。

+0

伟大而简单的答案,谢谢。但我有一个问题,具有此功能的最低PHP版本是否可用? – 2014-03-09 13:55:39

+3

此答案已过时。今天,PHP使用术语“回调”来指代一种特定的功能。有关更多信息,请阅读PHP自己的文档:http://php.net/manual/en/function.call-user-func.php – 2015-11-25 14:36:06

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

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

在PHP中,回调可以是任何的:

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

is_callable手动输入。

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

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中接受回调函数的名称作为自己的,因为避免相互冲突的参数字符串一些默认功能常数名称和函数名称之间。所以不要在这些事情上混淆。

0

随着PHP 5.3,你现在可以这样做:

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

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

最后,一个很好的办法做到这一点。 PHP是一个很好的补充,因为回调非常棒。

相关问题