개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.04.20 08:01

GearmanClient::echo 함수의 사용법에 대한 질문

목록
  • 몽고DB러버 4일 전 2025.04.20 08:01
  • 7
    1
제가 GearmanClient::echo 함수를 사용하여 작업을 제출하고 결과를 받는 과정에서 이해가 가는 부분이 없는데요.

GearmanClient::echo 함수는 작업을 제출하고 결과를 바로 받는 함수로, 작업을 제출할 때는 작업의 결과를 받기 위해 callback 함수를 등록해야 한다는 것을 알았는데요.

callback 함수를 등록하는 부분에서 제가 이해가 가지 않는 부분이 있습니다. callback 함수를 등록하는 코드는 다음과 같습니다.

php

$client = new GearmanClient();

$client->addServer('localhost', 4730);

$client->setClientWorkload(1000);

$client->addTask('echo', 'Hello, world!', $this, 'taskComplete');



여기서 `$this->taskComplete`가 callback 함수입니다. `$this`는 현재 객체를 의미하게 되는데요.

이 부분에서 제가 이해가 가지 않는 부분은 `$this`를 사용할 때는 그 객체가 이미 생성되어 있어야 한다는 것입니다.

하지만 `$this`를 사용하는 코드는 다음과 같이 객체를 생성하기 전에 사용하는 경우도 있습니다.

php

$client = new GearmanClient();

$client->addServer('localhost', 4730);

$client->setClientWorkload(1000);

$obj = new TestClass();

$client->addTask('echo', 'Hello, world!', $obj, 'taskComplete');



여기서 `$obj`는 TestClass라는 클래스의 객체입니다.

이 경우 `$obj`를 사용할 때는 `$obj`가 이미 생성되어 있어야 한다는 것입니다.

그런데 `$this`를 사용할 때는 `$this`가 이미 생성되어 있어야 한다는 것입니다.

이게 무슨 의미인지 이해가 가지 않습니다.

callback 함수를 등록할 때 `$this`를 사용할 수 없나요?

그리고 callback 함수를 등록할 때 `$this`를 사용할 수 없는 경우에는 어떻게 해야 하나요?

    댓글목록

    profile_image
    나우호스팅  4일 전



    GearmanClient::echo 함수는 작업을 제출하고 결과를 바로 받는 함수로, 작업을 제출할 때는 작업의 결과를 받기 위해 callback 함수를 등록해야 합니다.

    callback 함수를 등록하는 코드는 다음과 같습니다.

    #hostingforum.kr
    php
    
    $client = new GearmanClient();
    
    $client->addServer('localhost', 4730);
    
    $client->setClientWorkload(1000);
    
    $client->addTask('echo', 'Hello, world!', $this, 'taskComplete');
    
    


    여기서 `$this->taskComplete`가 callback 함수입니다. `$this`는 현재 객체를 의미합니다.

    하지만 `$this`를 사용하는 코드는 다음과 같이 객체를 생성하기 전에 사용하는 경우도 있습니다.

    #hostingforum.kr
    php
    
    $client = new GearmanClient();
    
    $client->addServer('localhost', 4730);
    
    $client->setClientWorkload(1000);
    
    $obj = new TestClass();
    
    $client->addTask('echo', 'Hello, world!', $obj, 'taskComplete');
    
    


    여기서 `$obj`는 TestClass라는 클래스의 객체입니다.

    callback 함수를 등록할 때 `$this`를 사용할 수 없나요?

    아니요, `$this`를 사용할 수 있습니다. `$this`는 현재 객체를 의미하므로, callback 함수가 호출될 때 `$this`는 이미 생성되어 있는 객체를 가리킵니다.

    그런데 `$this`를 사용할 때는 `$this`가 이미 생성되어 있어야 한다는 것입니다.

    이 말은 `$this`를 사용하는 코드는 객체를 생성하기 전에 사용할 수 없다는 것을 의미합니다.

    예를 들어, 다음과 같이 코드를 작성할 수 없습니다.

    #hostingforum.kr
    php
    
    $client = new GearmanClient();
    
    $client->addServer('localhost', 4730);
    
    $client->setClientWorkload(1000);
    
    $client->addTask('echo', 'Hello, world!', $this, 'taskComplete');
    
    $obj = new TestClass();
    
    


    이 코드는 `$this`를 사용하기 전에 객체를 생성하기 때문에 오류가 발생합니다.

    callback 함수를 등록할 때 `$this`를 사용할 수 없는 경우에는 어떻게 해야 하나요?

    이 경우는 `$this`를 사용하지 않고, callback 함수를 등록할 수 있습니다. 예를 들어, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    php
    
    $client = new GearmanClient();
    
    $client->addServer('localhost', 4730);
    
    $client->setClientWorkload(1000);
    
    $obj = new TestClass();
    
    $client->addTask('echo', 'Hello, world!', array($obj, 'taskComplete'));
    
    


    이 코드는 `$this`를 사용하지 않고, callback 함수를 등록할 수 있습니다.

    또는, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    php
    
    $client = new GearmanClient();
    
    $client->addServer('localhost', 4730);
    
    $client->setClientWorkload(1000);
    
    $obj = new TestClass();
    
    $client->addTask('echo', 'Hello, world!', function() use ($obj) {
    
        $obj->taskComplete();
    
    });
    
    


    이 코드는 `$this`를 사용하지 않고, callback 함수를 등록할 수 있습니다.

    결과적으로, callback 함수를 등록할 때 `$this`를 사용할 수 없나요?

    아니요, `$this`를 사용할 수 있습니다. `$this`는 현재 객체를 의미하므로, callback 함수가 호출될 때 `$this`는 이미 생성되어 있는 객체를 가리킵니다.

    2025-04-20 08:02

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 14,052건 / 80 페이지

검색

게시물 검색