문제
콜백 기능이 내 발전에 어떻게 도움이 될 수 있습니까? 특히 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');
}
}
이 콜백은 어떻게 작동 했습니까? 매개 변수는 어디에서 왔습니까?
해결책
나는 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에서 콜백의 힘을 알고 있다고 말했으며 항상 on on on on on on onlick, onload, onkeyup 등이므로 그 행동과 다소 비슷한 예를 제시하고 싶었습니다.
나는 이것이 어떤 도움이 되었기를 바랍니다. 매개 변수에 대한 질문과 관련하여 콜백에 제공되는 내용에 따라 다릅니다. 내 예에서는 트리거 된 기능에 온스테이션이 $ 컨텐츠 매개 변수 만 제공됩니다.
blog_post에는 onsave () 함수가 있는데,이 기능은 다시 호출 될 함수를 저장 한 다음 save () 함수가 게시물을 저장하려고 할 때 onsave ()로 정의 된 콜백을 호출합니다. 나는 충분히 분명하기를 바랍니다.
기본적으로 콜백에 전달되는 인수는이를 호출하는 기능에 따라 다릅니다. 내가 원하는 인수와 함께 save () 함수 호출 parsebbcode ()를 만들 수 있지만 콜백이 아니라 콜백을 호출하는 함수에 의해 결정됩니다. 콜백은 어떤 인수가 전달되는지를 제어 할 수 없습니다.