2016-09-06 8 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']; 
    //... 
} 
} 

И это метод геттер:

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

Что такое «другой результат», который вы видели во втором случае? – Chris

+0

В тех же обстоятельствах первый код запускается в оператор if, а второй - нет. То же самое и в функции журнала. – szenbalu

+2

Является ли 'getMessage()' idempotent? – David

ответ

4

Пожалуйста, проверьте php_error_log.

РНР empty не поддерживает выражения, когда вы используете PHP версии 5.5 <:

До PHP 5.5, пустой() поддерживает только переменные; все остальное будет привести к ошибке синтаксического анализа. [...]

Возможно, это Resaon, почему код внутри вашего оператора if не достигнут.

+0

Спасибо за ваш ответ, с '$ message-> getMessage()! =" "' Он работает коррумпированно. – szenbalu

+1

Если это ваша проблема, вам стоит рассмотреть возможность обновления вашей версии PHP, поскольку она должна работать в PHP 5.5, которая является самой низкой в ​​настоящее время версией. Если вы используете версию старше 5.5, вам следует срочно рассмотреть возможность обновления. – Simba