Frage

Wie können Callback -Funktionen mir bei meiner Entwicklung helfen? Besonders mit PHP. Ich bin neu in PHP und in der Programmierung selbst, aber ich habe die Kraft von Rückrufen in JS -Bibliotheken wie JQuery gesehen. Ich habe mit einem Rückruf in PHP gearbeitet, aber ich war noch viele Fragen dazu:

  1. Was ist der Umfang einer Rückruffunktion?
  2. Welche Parameter kann ich an eine Rückruffunktion übergeben (entweder implizit oder explizit)

Hier ist ein Code aus der Kohana -Dokumentation:

$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');
   }
}

Wie hat dieser Rückruf funktioniert? Woher kommen die Parameter?

War es hilfreich?

Lösung

Ich kenne Kohana nicht, aber ich gehe davon aus, dass dies impliziert, dass es bei der Validierung der E -Mail _unique_email () aufgerufen wird.

In PHP -Rückern können Sie die Entwicklung helfen, Ihnen eine einfache Möglichkeit zu bieten, Ihren Code zu erweitern. Zum Beispiel:

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

Dieser Code würde einen neuen Blog -Beitrag erstellen, den Inhalt festlegen und in der Datenbank speichern. Angenommen, Sie möchten BBCode im Inhalt verarbeiten. Wie können Sie das tun, ohne die Class blog_post bearbeiten zu müssen? Mit einem Rückruf.

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

Offensichtlich gibt es verschiedene Möglichkeiten, Rückrufe implementieren zu können, aber Sie sagten, Sie wussten die Kraft von Rückrufen in JS, und sie sind immer onclick, Onload, OnKeyup usw., also wollte ich ein Beispiel geben, das diesem Verhalten etwas ähnelte.

Ich hoffe, das war von jeder Hilfe. In Bezug auf Ihre Fragen zu Parametern hängt dies davon ab, was dem Rückruf gegeben wird. In meinem Beispiel erhält jede Funktion, die ausgelöst wird, nur den Parameter $ Inhalts.

In Blog_Post habe ich eine Onsave () -Funktion, die die Funktion speichern würde, die zurückgerufen werden soll, und wenn die Funktion Save () versucht, einen Beitrag zu speichern, rufen Sie alle Rückrufe auf, die mit Onsave () definiert worden waren. Ich hoffe, ich bin klar genug.

Grundsätzlich hängen die Argumente, die an die Rückrufe übergeben werden, von den Funktionen ab, die sie aufrufen. Ich könnte den Save () -Funktion aufrufen, ParseBBCode () mit allen Argumenten, die ich wollte, aber diese werden durch die Funktion entschieden, die den Rückruf aufruft, nicht durch den Rückruf. Der Rückruf hat keine Kontrolle darüber, welche Argumente an ihn übergeben werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top