2016-09-06 10 views
0

以下の2つのコードが異なる結果をもたらす可能性はありますか?PHPインスタンスメソッドと変数の比較

これは私が期待通りに動作します:私は、変更されたすべてのiが$message->getMessage()$cond変数を変更したことである

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

:私は私に異なる結果を与えた理由を不思議開始どこ

$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

2番目のケースで見た「異なる結果」とは何ですか? – Chris

+0

同じ状況では、最初のコードはif文に実行されますが、2番目のコードは実行されません。また、ログ機能の動作も同じです。 – 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