практические функции обратного вызова

StackOverflow https://stackoverflow.com/questions/1604429

  •  05-07-2019
  •  | 
  •  

Вопрос

Как функции обратного вызова могут помочь мне в моем развитии? Особенно с 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 () с любыми аргументами, которые я хотел, но они решаются функцией, которая вызывает обратный вызов, а не обратным вызовом. Обратный вызов не контролирует, какие аргументы ему передаются.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top