2011-09-02 5 views
2

내가라는 방법으로 라이브러리가PHP "do"라는 함수를 만드는 법?

public function do 

"할"본 완전히 버그 밖으로 파서 구문 분석 오류 : 구문 오류, 예기치 못한 T_DO, 기대에 T_STRING ...

//same on call 
$obj->do() 

구문 분석 오류 : 구문 오류, 예기치 않은 T_DO, 예상 T_STRING 또는 T_VARIABLE 또는 '$'

Gearman 그런데 "할 일"기능을 사용합니다.

http://www.php.net/manual/en/gearmanclient.do.php

+0

당신은 당신의 질문에 두어야 PHP 자체에서 그것을 할 캔트 : 당신은 Gearman을 코드를 보면 알 수 있습니다 목적. – webbiedave

답변

11

는 "할"예약 된 키워드입니다. 이 방법은주의해서 사용되어야한다는 것을 명심 :

// Now define a __call() method (requires PHP > 5.2.3 to take effect) 
public function __call($func, $args) 
{ 
    switch ($func) 
    { 
     case 'list': 
      return $this->ls((isset($args[0]))? $args[0]: null); 
     break; 
     case 'unset': 
      return $this->rm($args[0]); 
     break; 
     default: 
      trigger_error("Call to undefined method ".__CLASS__."::$func()", E_USER_ERROR); 
     die(); 
    } 

그래서 당신이 볼

, 당신은 __call 오버로드를 사용하여 모든 클래스의 do 방법 (또는 다른 예약어를) 사용할 수 있습니다. 외부 적으로이 방법은 전통적으로 정의 된 방법과 구별 될 수 없습니다.

+2

내가 알고있는 덕분에 예약어이며 내 질문에 대답했습니다. – bman

7

그 나쁜 생각은 키워드입니다 함수 이름을 지정합니다. 또한 do은 그다지 설명 적이 지 않으므로 그 이름도 더 나쁜 이름 일 수 있습니다.

더 좋은 이름을 선택하십시오. 같은 페이지에서 http://www.php.net/manual/en/reserved.keywords.php

, 당신은 사용자가이 주위에 방법을 언급 볼 수있는 코멘트 :

+1

나는 선택의 여지가 없다. 위의 Gearman에 대해 "do"메소드가있는 더미 클래스 파일을 작성 중입니다. 나는 그 예약어를 안다. 그러나 그들은 일하게했다 나는 방법을 모른다. – bman

+0

더미 란 무엇입니까? –

+3

@ 대니얼 (Daniel) 이것은 cop-out 대답입니다. 그는 가능한지, 어떻게해야하는지 또는하지 말아야하는지에 대해 물었다. – AlienWebguy

1
class MyClass { 
     function _do() { 
      echo "doing something"; 
     } 

     function __call($methodName, $arguments) { 
      if($methodName == 'do') { 
       $this->_do(); 
      } 
     } 
    } 

    $myObject = new MyClass(); 
    $myObject->do(); 
+0

10 분 전에 게시 한 동일한 답변을 게시하는 특정 유틸리티는 무엇입니까? : P –

+1

@Chris 알아 차리지 못했지만, 나는 그 질문에 답이 올바른지 확인하기 위해 조사를하고있었습니다. – nobody

1

gearman은 pecl 확장자이며 c로 작성됩니다. 따라서, 그것은 PHP 파서에 의해 구문 분석되지 않습니다. PHP는 실제로 do() 메소드를 호출 할 수있게 해 주지만, 물건을 선언 할 때이 예약 된 키워드를 정의하거나 사용할 수는 없다. 그들이 그것을 어떻게 그래서 그건

__PHP_ME_MAPPING(do, gearman_client_do, arginfo_oo_gearman_client_do, 0) 

을 당신은 당신의 목적은 실물 크기의 모형을 만드는 것입니다