Что такое функция обратного вызова и как ее использовать с ООП
Я хочу использовать php простой синтаксический анализатор HTML DOM, чтобы получить изображение, заголовок, дату и описание из каждой статьи на странице, полной статей. При взгляде на API я замечаю, что у него есть set_callback, который устанавливает функцию обратного вызова. Однако я не уверен, что это делает или как бы я это использовал? В одном из примеров он используется для вызова функции, которая удаляет некоторые вещи, мне интересно, нужно ли использовать это для вызова всех функций?
Наверное, мне интересно, почему я использую это, и что он делает, так как я никогда раньше не сталкивался с функцией обратного вызова!
5 answers
Вот пример базовой функции обратного вызова:
<?php
function thisFuncTakesACallback($callbackFunc)
{
echo "I'm going to call $callbackFunc!<br />";
$callbackFunc();
}
function thisFuncGetsCalled()
{
echo "I'm a callback function!<br />";
}
thisFuncTakesACallback( 'thisFuncGetsCalled' );
?>
Вы можете вызвать функцию, имя которой хранится в переменной, например: $переменная().
Итак, в приведенном выше примере мы передаем имя функции thisfunctionscalled в функцию thisfunctakesacallback(), которая затем вызывает переданную функцию.
Функция обратного вызова будет использовать эту функцию для любых данных, возвращаемых определенным методом.
Я не уверен, как работает эта конкретная библиотека, но это может быть что-то такое же простое, как:
$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()
" будет запущена для любых найденных данных. Опять же, я не уверен, как работает эта конкретная библиотека (т.Е. Какие методы будут вызываться функцией обратного вызова)
Обратный вызов - это либо функция, либо метод экземпляра объекта, либо статический метод класса. В любом случае, это своего рода указатель на функцию. В некоторых языках функции относятся к определенному типу. Таким образом, вы можете назначить функцию переменной. Обычно их называют функционально-ориентированными языками. Хорошим примером является Javascript.
В PHP обратный вызов может быть любым из:
$fn = 'foo'; // => foo()
$fn = array($obj, 'foo'); // => $obj->foo()
$fn = array('Foo', 'bar'); // => Foo::bar()
См. Ввод вручную для is_callable
.
Вы можете вызвать обратный вызов с помощью довольно подробного функция call_user_func
.
Определение
Обратный вызов/вызываемый - это простая функция (либо анонимная, либо именованная функция), которую мы передаем другой функции в качестве параметра функции, который в результате возвращает переданную функцию.
Пример
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 есть некоторые функции по умолчанию, которые принимают имя функции обратного вызова в качестве строки в своем параметре, чтобы избежать конфликта между именем константы и имя функции. Так что не путайтесь в таких вещах.
С помощью PHP 5.3
теперь вы можете сделать следующее:
function doIt($callback) { $callback(); }
doIt(function() {
// this will be done
});
Наконец, хороший способ сделать это. Отличное дополнение к PHP
, потому что обратные вызовы - это потрясающе.