Что такое функция обратного вызова и как ее использовать с ООП - PullRequest
11 голосов
/ 24 октября 2008

Я хочу использовать php простой анализатор HTML DOM , чтобы получить изображение, заголовок, дату и описание из каждой статьи на странице, полной статей. Глядя на API, я замечаю, что у него есть set_callback, который устанавливает функцию обратного вызова. Однако я не уверен, что это делает или как я бы использовал это? В одном из примеров он используется для вызова функции, которая удаляет некоторые вещи, мне интересно, нужно ли вам использовать это для вызова всех функций?

Полагаю, мне интересно, почему я использую это и что он делает, потому что я никогда раньше не сталкивался с функцией обратного вызова!

Ответы [ 5 ]

23 голосов
/ 24 октября 2008

Вот пример базовой функции обратного вызова:

<?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 () , которая затем вызывает переданную функцию.

3 голосов
/ 24 октября 2008

Функция обратного вызова будет использовать эту функцию для любых данных, возвращаемых определенным методом.

Я не уверен, как работает эта конкретная библиотека, но это может быть что-то простое:

$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 голосов
/ 24 октября 2008

Обратный вызов - это либо функция, либо метод экземпляра объекта, либо статический метод класса. В любом случае, это своего рода указатель на функцию. В некоторых языках функции имеют определенный тип. Таким образом, вы можете назначить функцию переменной. Они обычно называются функционально-ориентированными языками. Хорошим примером является Javascript.

В PHP обратный вызов может быть любым из:

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

См. Ручной ввод для is_callable.

Вы можете вызвать обратный вызов с довольно многословной функцией call_user_func.

0 голосов
/ 14 ноября 2017

С PHP 5.3 вы можете теперь сделать это:

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

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

Наконец, хороший способ сделать это. Отличное дополнение к PHP, потому что обратные вызовы потрясающие.

0 голосов
/ 14 августа 2017

Defination

Callbacks / callable - это простая функция (либо анонимная, либо именованная функция), которую мы передаем другой функции как параметр функции, который в результате возвращает эту переданную функцию.

Пример

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 есть некоторые функции по умолчанию, которые принимают имя функции обратного вызова в виде строки в своем параметре из-за избежания конфликта между именем константы и именем функции. Так что не путайся в подобных вещах.

...