практические функции обратного вызова
Вопрос
Как функции обратного вызова могут помочь мне в моем развитии? Особенно с PHP. Я новичок в php и в программировании, но я видел силу обратных вызовов в js-библиотеках, таких как jquery. Я работал с обратным вызовом в php, но меня оставили, задавая много вопросов об этом:
<Ол>вот код из документации Kohana:
$post->add_callbacks('email', array($this, '_unique_email'));
// Define the callback method
/*
* Callback method that checks for uniqueness of email
*
* @param Validation $array Validation object
* @param string $field name of field being validated
*/
public function _unique_email(Validation $array, $field)
{
// check the database for existing records
$email_exists = (bool) ORM::factory('user')->where('email', $array[$field])->count_all();
if ($email_exists)
{
// add error to validation object
$array->add_error($field, 'email_exists');
}
}
как работал этот обратный вызов? откуда взялись параметры?
Решение
Я не знаю Kohana, но я предполагаю, что это подразумевает, что при проверке электронной почты он вызывает _unique_email ().
В PHP обратные вызовы могут помочь вам в разработке, чтобы предоставить вам простой способ расширить ваш код. Например:
$post = new Blog_Post();
$post->contents = Я не знаю Kohana, но я предполагаю, что это подразумевает, что при проверке электронной почты он вызывает _unique_email ().
В PHP обратные вызовы могут помочь вам в разработке, чтобы предоставить вам простой способ расширить ваш код. Например:
$post = new Blog_Post();
$post->onSave('parseBBCode');
$post->contents = Я не знаю Kohana, но я предполагаю, что это подразумевает, что при проверке электронной почты он вызывает _unique_email ().
В PHP обратные вызовы могут помочь вам в разработке, чтобы предоставить вам простой способ расширить ваш код. Например:
$post = new Blog_Post();
$post->contents = Я не знаю Kohana, но я предполагаю, что это подразумевает, что при проверке электронной почты он вызывает _unique_email ().
В PHP обратные вызовы могут помочь вам в разработке, чтобы предоставить вам простой способ расширить ваш код. Например:
<*>
Этот фрагмент кода создаст новое сообщение в блоге, установит его содержимое и сохранит его в базе данных. Но, допустим, вы хотите обработать BBCode в содержимом. Как вы можете сделать это без необходимости редактировать класс Blog_Post? С обратным вызовом.
<*>
Очевидно, что существуют разные способы реализации обратных вызовов, но вы сказали, что знаете силу обратных вызовов в JS, и они всегда onClick, onLoad, onKeyUp и т. д., поэтому я хотел бы привести пример, несколько напоминающий такое поведение. р>
Я надеюсь, что это помогло. Относительно ваших вопросов о параметрах, это зависит от того, что дано для обратного вызова. В моем примере любая функция, которая запускается в onSave, будет иметь только параметр $ contents.
В blog_post у меня есть функция onSave (), которая хранит функцию, которую нужно вызвать, а затем, когда функция save () пытается сохранить сообщение, она вызывает любые обратные вызовы, определенные с помощью onSave. (). Я надеюсь, что я достаточно ясно.
По сути, аргументы, которые передаются обратным вызовам, зависят от функций, которые их вызывают. Я мог бы вызвать функцию save () parseBBCode () с любыми аргументами, которые я хотел, но они решаются функцией, которая вызывает обратный вызов, а не обратным вызовом. Обратный вызов не контролирует, какие аргументы ему передаются.
POST['contents'];
$post->save();
Этот фрагмент кода создаст новое сообщение в блоге, установит его содержимое и сохранит его в базе данных. Но, допустим, вы хотите обработать BBCode в содержимом. Как вы можете сделать это без необходимости редактировать класс Blog_Post? С обратным вызовом.
<*>
Очевидно, что существуют разные способы реализации обратных вызовов, но вы сказали, что знаете силу обратных вызовов в JS, и они всегда onClick, onLoad, onKeyUp и т. д., поэтому я хотел бы привести пример, несколько напоминающий такое поведение. р>
Я надеюсь, что это помогло. Относительно ваших вопросов о параметрах, это зависит от того, что дано для обратного вызова. В моем примере любая функция, которая запускается в onSave, будет иметь только параметр $ contents.
В blog_post у меня есть функция onSave (), которая хранит функцию, которую нужно вызвать, а затем, когда функция save () пытается сохранить сообщение, она вызывает любые обратные вызовы, определенные с помощью onSave. (). Я надеюсь, что я достаточно ясно.
По сути, аргументы, которые передаются обратным вызовам, зависят от функций, которые их вызывают. Я мог бы вызвать функцию save () parseBBCode () с любыми аргументами, которые я хотел, но они решаются функцией, которая вызывает обратный вызов, а не обратным вызовом. Обратный вызов не контролирует, какие аргументы ему передаются.
POST['contents'];
$post->save(); # Will call parseBBCode when saving the blog post.
function parseBBCode($contents) {
# Parse BBCode and return the parsed contents.
}
Этот фрагмент кода создаст новое сообщение в блоге, установит его содержимое и сохранит его в базе данных. Но, допустим, вы хотите обработать BBCode в содержимом. Как вы можете сделать это без необходимости редактировать класс Blog_Post? С обратным вызовом.
<*>
Очевидно, что существуют разные способы реализации обратных вызовов, но вы сказали, что знаете силу обратных вызовов в JS, и они всегда onClick, onLoad, onKeyUp и т. д., поэтому я хотел бы привести пример, несколько напоминающий такое поведение. р>
Я надеюсь, что это помогло. Относительно ваших вопросов о параметрах, это зависит от того, что дано для обратного вызова. В моем примере любая функция, которая запускается в onSave, будет иметь только параметр $ contents.
В blog_post у меня есть функция onSave (), которая хранит функцию, которую нужно вызвать, а затем, когда функция save () пытается сохранить сообщение, она вызывает любые обратные вызовы, определенные с помощью onSave. (). Я надеюсь, что я достаточно ясно.
По сути, аргументы, которые передаются обратным вызовам, зависят от функций, которые их вызывают. Я мог бы вызвать функцию save () parseBBCode () с любыми аргументами, которые я хотел, но они решаются функцией, которая вызывает обратный вызов, а не обратным вызовом. Обратный вызов не контролирует, какие аргументы ему передаются.
POST['contents'];
$post->save();
Этот фрагмент кода создаст новое сообщение в блоге, установит его содержимое и сохранит его в базе данных. Но, допустим, вы хотите обработать BBCode в содержимом. Как вы можете сделать это без необходимости редактировать класс Blog_Post? С обратным вызовом.
<*>Очевидно, что существуют разные способы реализации обратных вызовов, но вы сказали, что знаете силу обратных вызовов в JS, и они всегда onClick, onLoad, onKeyUp и т. д., поэтому я хотел бы привести пример, несколько напоминающий такое поведение. р>
Я надеюсь, что это помогло. Относительно ваших вопросов о параметрах, это зависит от того, что дано для обратного вызова. В моем примере любая функция, которая запускается в onSave, будет иметь только параметр $ contents.
В blog_post у меня есть функция onSave (), которая хранит функцию, которую нужно вызвать, а затем, когда функция save () пытается сохранить сообщение, она вызывает любые обратные вызовы, определенные с помощью onSave. (). Я надеюсь, что я достаточно ясно.
По сути, аргументы, которые передаются обратным вызовам, зависят от функций, которые их вызывают. Я мог бы вызвать функцию save () parseBBCode () с любыми аргументами, которые я хотел, но они решаются функцией, которая вызывает обратный вызов, а не обратным вызовом. Обратный вызов не контролирует, какие аргументы ему передаются.