2009-10-22 8 views
0

내 개발 과정에서 콜백 함수가 어떻게 도움이 될 수 있습니까? 특히 PHP와. 나는 php와 프로그래밍 자체에 익숙하지 않지만 jquery와 같은 js 라이브러리에서 콜백의 힘을 보았다. 나는 PHP에서 콜백 일한하지만 난 그것에 대해 질문을 많이 물어 남아 있었다 : 콜백 함수의 범위는 실용적인 콜백 함수

  • 내가 콜백 함수에 전달할 수있는 매개 변수 (암시 적 또는 무엇

    1. 을 명시 적으로) 여기

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

    이 콜백 작업을 어떻게했는지? 매개 변수의 출처는 어디입니까?

    답변

    1

    나는 Kohana를 모르지만, 이메일 유효성 검사를 할 때 _unique_email()을 호출한다고 가정합니다.

    PHP 콜백에서 코드를 쉽게 확장 할 수있는 개발 방법을 제공합니다. 예 :

    이 코드는 새 블로그 게시물을 만들고 내용을 설정 한 다음 데이터베이스에 저장합니다. 그러나 내용에서 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(). 내가 충분히 명확 해지기를 바란다.

    기본적으로 콜백에 전달되는 인수는이를 호출하는 함수에 따라 다릅니다. save() 함수 호출은 원하는 모든 인수로 parseBBCode()를 호출 할 수 있지만 콜백을 호출하는 것이 아니라 콜백을 호출하는 함수에 의해 결정됩니다. 콜백은 전달 된 인수를 제어하지 않습니다.