Pergunta

Como as funções de retorno de chamada podem me ajudar no meu desenvolvimento?Especialmente com PHP.Sou novo em php e na programação em si, mas vi o poder dos retornos de chamada em bibliotecas js como jquery.Já trabalhei com callback em php mas fiquei fazendo muitas perguntas sobre isso:

  1. qual é o escopo de uma função de retorno de chamada
  2. quais parâmetros posso passar para uma função de retorno de chamada (implícita ou explicitamente)

aqui está um código da documentação do 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');
   }
}

como funcionou esse retorno de chamada?de onde vieram os parâmetros?

Foi útil?

Solução

Não conheço Kohana, mas presumo que isso implica que ao validar o email, ele chama _unique_email().

Em PHP, os retornos de chamada podem ajudá-lo no desenvolvimento, fornecendo uma maneira fácil de estender seu código.Por exemplo:

$post = new Blog_Post();
$post->contents = $_POST['contents'];
$post->save();

Esse trecho de código criaria uma nova postagem no blog, definiria o conteúdo e salvaria no banco de dados.Mas digamos que você queira processar o BBCode no conteúdo.Como você pode fazer isso sem precisar editar a classe Blog_Post?Com um retorno de chamada.

$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.
}

Obviamente, existem diferentes maneiras de implementar callbacks, mas você disse que conhecia o poder dos callbacks em JS, e eles são sempre onClick, onLoad, onKeyUp, etc, então queria dar um exemplo que lembrasse um pouco esse comportamento.

Espero que isso tenha ajudado.Em relação às suas dúvidas sobre parâmetros, depende do que é dado ao callback.No meu exemplo, qualquer função que esteja sendo acionada onSave receberá apenas o parâmetro $contents.

No blog_post, eu tenho uma função onSave(), que armazenaria a função a ser chamada de volta e, quando a função save() tentasse salvar uma postagem, ela chamaria qualquer retorno de chamada definido com onSave().Espero estar sendo claro o suficiente.

Basicamente, os argumentos passados ​​para os retornos de chamada dependem das funções que os chamam.Eu poderia fazer a função save() chamar parseBBCode() com quaisquer argumentos que eu quisesse, mas eles são decididos pela função que chama o retorno de chamada, não pelo retorno de chamada.O retorno de chamada não tem controle sobre quais argumentos são passados ​​para ele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top