2008-10-23 10 views
11

Quiero utilizar php simple HTML DOM parser para tomar la imagen, el título, la fecha y la descripción de cada artículo en una página llena de artículos. Cuando miro la API, noto que tiene un set_callback que establece una función de devolución de llamada. Sin embargo, no estoy seguro de qué hace esto o cómo lo usaría? En uno de los ejemplos, solía llamar a una función que elimina algunas cosas, ¿me pregunto si tiene que usar esto para llamar a todas las funciones?Qué es una función de devolución de llamada y cómo la uso con OOP

Supongo que me estoy preguntando por qué uso esto, y qué hace ya que nunca antes me he encontrado con una función de devolución de llamada.

Respuesta

20

Aquí hay un ejemplo básico función de devolución:

<?php 

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

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

thisFuncTakesACallback('thisFuncGetsCalled'); 
?> 

Puede llamar a una función que tiene su nombre almacenado en una variable de la siguiente manera: $ variable().

Así, en el ejemplo anterior, se pasa el nombre del thisFuncGetsCalled función para thisFuncTakesACallback() que a su vez llama a la función se ha pasado.

+0

Respuesta genial y simple, gracias. Sin embargo, tengo una pregunta, ¿cuál es la versión PHP mínima requerida que tiene esta característica disponible? –

+3

Esta respuesta no está actualizada. Hoy, PHP usa el término 'devolución de llamada' para referirse a un tipo específico de función. Para obtener más información, lea la documentación propia de PHP sobre el asunto: http://php.net/manual/en/function.call-user-func.php –

+0

todavía funciona en php7 –

3

Una función de devolución de llamada utilizará esa función en cualquier dato que esté devuelto por un método particular.

no estoy seguro de cómo funciona esta biblioteca en particular, pero podría ser algo tan simple como:

$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>'; 
} 

es decir, la función "make_bold()" se ejecutará en cualquier dato que se encuentran. De nuevo, no estoy seguro de cómo funciona esta biblioteca en particular (es decir, a qué métodos llamará la función de devolución de llamada)

2

Una devolución de llamada es una función, un método de instancia de objeto o un método estático en una clase. De cualquier manera, es una especie de puntero a la función. En algunos idiomas, las funciones son de un tipo específico. Entonces puedes asignar una función a una variable. Estos generalmente se llaman lenguajes orientados a funciones. Un buen ejemplo es Javascript.

En PHP, una devolución de llamada puede ser cualquiera de:

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

vea la entrada del manual para is_callable.

Puede invocar una devolución de llamada con la función bastante detallada call_user_func.

0

Defination

devoluciones de llamada A/exigible es una función simple (ya sea que es función anónima o nombre) que se pasa a otra función como parámetro de la función que en el resultado rendimientos que pasaron función.

Ejemplo

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 

no se confunda

Hay algunas funciones por defecto en PHP que acepta el nombre de la función de devolución de llamada como una cadena en su parámetro, porque de evitar conflicto entre el nombre constante y el nombre de la función. Entonces no te confundas en este tipo de cosas.

0

Con PHP 5.3, ahora se puede hacer esto:

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

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

Por último, una buena manera de hacerlo. Una gran adición a PHP, porque las devoluciones de llamada son increíbles.

+0

¿Qué sucede si '$ callback' no es una función ? ¿PHP arroja un error fatal, advertencia o nada? – Spartacus

Cuestiones relacionadas