2016-09-06 41 views
0

下面的兩個代碼可能會給出不同的結果嗎?PHP實例方法與變量

這將運行如我所料:

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

這是我開始疑惑,爲什麼給了我不同的結果:

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

所有我修改的是,我改變$cond變量$message->getMessage()

這是消息類的大蟒:

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']; 
    //... 
} 
} 

這是getter方法:

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版本,因爲它應該在當前支持的最低版本PHP 5.5中工作。如果您使用的是5.5以上的版本,則應該緊急考慮升級。 – Simba