2016-09-06 7 views
0

아래의 두 코드가 서로 다른 결과를 낼 수 있습니까? 내가 예상대로PHP 인스턴스 메소드 대 변수

이 실행됩니다 :

$message = new Message(); 
$helper->log($message->getMessage()); 
if(!empty($message->getMessage())){ 
    // do my stuff 
} 

내가 수정 한 모든 내가 $message->getMessage()$cond 변수를 변경한다는 것입니다 :

$message = new Message(); 
$cond = $message->getMessage(); 
$helper->log($cond); 
if(!empty($cond)){ 
    // do my stuff 
} 

내가 나에게 다른 결과를 준 이유를 궁금해 시작하는 곳입니다.

는 메시지 클래스의 뱀입니다 :

class Message { 
    private $input; 
    private $message; 

public function Message() 
{ 
    $this->input = json_decode(file_get_contents('php://input'), true); 
    // ... 
    $this->message = $this->input['entry'][0]['messaging'][0]['message']['text']; 
    //... 
} 
} 

그리고 이것은 게터 방법입니다 :

public function getMessage() 
{ 
    return $this->message; 
} 
+0

두 번째 경우에서 본 "다른 결과"는 무엇입니까? – Chris

+0

동일한 상황에서 첫 번째 코드는 if 문으로 실행되지만 두 번째 코드는 실행되지 않습니다. 그리고 로그 기능에서도 마찬가지입니다. – szenbalu

+2

'getMessage()'는 멱등합니까? – David

답변

4

당신의 php_error_log을 확인하시기 바랍니다.

PHP의 empty 표현을 지원하지 않습니다 당신이 PHP 버전 < 5.5을 사용하는 경우 :

이전 PHP 5.5,()는 변수를 지원 빈; 그 외의 경우 은 구문 분석 오류가 발생합니다. [...]

아마도 if 문 내부의 코드에 도달하지 못했을 수도 있습니다.

+0

답을 주셔서 감사합니다. $ message-> getMessage()! = ""'그것은 올바르게 작동하고 있습니다. – szenbalu

+1

이것이 문제가된다면 현재 지원되는 가장 낮은 버전 인 PHP 5.5에서 작동하므로 PHP 버전 업그레이드를 고려해야합니다. 5.5보다 오래된 버전을 사용 중이라면 업그레이드를 긴급히 고려해야합니다. – Simba