回调函数如何帮助我进行开发?特别是PHP。我是php和编程本身的新手,但我看到了像jquery这样的js库中回调的强大功能。我曾经在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');
}
}
这个回调是如何工作的?参数来自哪里?
答案 0 :(得分:1)
我不知道Kohana,但我认为这意味着在验证电子邮件时,它会调用_unique_email()。
在PHP中,回调可以帮助您进行开发,为您提供扩展代码的简便方法。例如:
$post = new Blog_Post();
$post->contents = $_POST['contents'];
$post->save();
这段代码将创建一个新的博客文章,设置内容,并将其保存在数据库中。但是,假设你想在内容中处理BBCode。你怎么能这样做,而不必编辑Blog_Post类?回调。
$post = new Blog_Post();
$post->onSave('parseBBCode');
$post->contents = $_POST['contents'];
$post->save(); # Will call parseBBCode when saving the blog post.
function parseBBCode($contents) {
# Parse BBCode and return the parsed contents.
}
显然,有不同的方法来实现回调,但是你说你知道JS中回调的强大功能,而且它们总是onClick,onLoad,onKeyUp等,所以我想给出一个有点类似于这种行为的例子。
我希望这有任何帮助。关于参数的问题,它取决于给回调的内容。在我的例子中,任何被触发onSave的函数都只会被赋予$ contents参数。
在blog_post中,我有一个onSave()函数,它会存储要回调的函数,然后当save()函数试图保存帖子时,它会调用任何用onSave定义的回调函数()。我希望我足够清楚。
基本上,传递给回调的参数取决于调用它们的函数。我可以使用我想要的任何参数调用parseBBCode()来调用parseBBCode(),但这些函数由调用回调的函数决定,而不是由回调决定。回调无法控制传递给它的参数。